ios – 将阴影与投射它的SKSpriteNode一起淡化
2019年06月24日
作者:佚名
这是我的设置,使用Sprite Kit.首先,我在SKScene中创建一个简单的精灵节点,如下所示:
let block = SKSpriteNode(color: UIColor.redColor(),size: CGSizeMake(90,160)) block.zPosition = 2 block.shadowCastBitMask = 1 addChild(block)
然后向场景添加一个灯光节点:
let light = SKLightNode() light.categoryBitMask = 1 light.falloff = 1 addChild(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 later let shadowColor = light.shadowColor // Also grab its alpha channel so we don't have to do it each time let 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 parallel block.runAction(SKAction.group([fadeBlock,fadeShadow]))
以上是来客网为你收集整理的ios – 将阴影与投射它的SKSpriteNode一起淡化全部内容,希望文章能够帮你解决ios – 将阴影与投射它的SKSpriteNode一起淡化所遇到的程序开发问题。
如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。