ios – 将阴影与投射它的SKSpriteNode一起淡化

ios – 将阴影与投射它的SKSpriteNode一起淡化,第1张

概述这是我的设置,使用Sprite Kit.首先,我在SKScene中创建一个简单的精灵节点,如下所示: let block = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(90, 160))block.zPosition = 2block.shadowCastBitMask = 1addChild(block) 然后向场景添 这是我的设置,使用Sprite Kit.首先,我在SKScene中创建一个简单的精灵节点,如下所示:
let block = SKSpriteNode(color: UIcolor.redcolor(),size: CGSizeMake(90,160))block.zposition = 2block.shadowCastBitMask = 1addChild(block)

然后向场景添加一个灯光节点:

let light = SKlightNode()light.categoryBitMask = 1light.falloff = 1addChild(light)

果然,块现在投下一个漂亮的小阴影

现在我通过 *** 纵其Alpha值来淡化块,例如通过运行一个动作:

let fadeOut = SKAction.fadeAlphaTo(0.0,duration: 5.0)block.runAction(fadeOut)

这是一个尴尬的情况:当块变得越来越半透明时,阴影保持完全相同.这就是它在行动结束前的一刻:

一旦Alpha完全降至0.0,阴影就会从一帧到下一帧突然消失.

然而,随着投射它的物体变得越来越透明,使阴影慢慢变弱和变弱会更好.

题:

使用Sprite Kit可以达到这样的效果吗?如果是这样,你会怎么做呢?

解决方法 这有点棘手,因为SKlightNode投射的阴影不受节点的Alpha属性的影响.您需要做的是在淡出块的同时淡出SKlightNode的shadowcolor属性的Alpha通道.

基本步骤是:

>存储灯光的shadowcolor和该颜色的Alpha通道以供参考.
>创建一个SKAction.customActionWithDuration:

>根据原始动作以及动作到目前为止的时间重新计算Alpha通道的值.
>将灯光的shadowcolor设置为其原始颜色,但使用新的Alpha通道.

>并行运行块的淡入淡出动作和阴影的淡入淡出动作.

例:

let fadeDuration = 5.0 // We're going to use this a lot// Grab the light's original shadowcolor so we can use it laterlet shadowcolor = light.shadowcolor// Also grab its Alpha channel so we don't have to do it each timelet shadowAlpha = CGcolorGetAlpha(shadowcolor.CGcolor)let fadeShadow = SKAction.customActionWithDuration(fadeDuration) {    // The first parameter here is the node this is running on.    // IDeally you'd use that to get the light,but I'm taking    // a shortcut and accessing it directly.    (_,time) -> VoID in    // This is the original Alpha channel of the shadow,adjusted    // for how much time has past while running the action so far    // It will go from shadowAlpha to 0.0 over fadeDuration    let Alpha = shadowAlpha - (shadowAlpha * time / CGfloat(fadeDuration))    // Set the light's shadowcolor to the original color,but replace    // its Alpha channel our newly calculated one    light.shadowcolor = shadowcolor.colorWithAlphaComponent(Alpha)}// Make the action to fade the block too; easy!let fadeBlock = SKAction.fadeAlphaTo(0.0,duration: fadeDuration)// Run the fadeBlock action and fadeShadow action in parallelblock.runAction(SKAction.group([fadeBlock,fadeShadow]))
总结

以上是内存溢出为你收集整理的ios – 将阴影与投射它的SKSpriteNode一起淡化全部内容,希望文章能够帮你解决ios – 将阴影与投射它的SKSpriteNode一起淡化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1114153.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存