iOS 7 Sprite Kit 动画速度变化
Posted
技术标签:
【中文标题】iOS 7 Sprite Kit 动画速度变化【英文标题】:iOS 7 Sprite Kit speed change for animation 【发布时间】:2014-02-06 22:29:54 【问题描述】:我有一个runAction
,它正在为SKSpriteNode
设置动画。我让节点在repeatActionForever
中上下移动。我希望节点在节点向上移动时减速并在节点向下移动时加速。
[node runAction:[SKAction repeatActionForever:
[SKAction sequence:@
[[SKAction speedTo:0.1 duration:0.5],
[SKAction moveToY:2 * node.size.height / 3 duration:0.5],
[SKAction speedTo:1 duration:0.5],
[SKAction moveToY:node.size.height / 2 duration:0.5],
[SKAction moveToY:node.size.height duration:1],
[SKAction moveToY:node.size.height / 2 duration:1]]]]];
当我添加行 [SKAction speedTo:0 duration:0.5]
时,其余代码在 0.5 秒后以 0 的速度运行,即使我添加了第二个 speedTo 动作,它将速度增加到 1。
问题:如何在节点移动时改变节点的速度,而不是每个方向的速度都停滞不前。
提前致谢。
【问题讨论】:
我认为一旦速度等于 0,动作就会停止运行,节点就会有效地暂停。 这是正确的。感谢您指出这一点。 当第一个动作向上移动以减速时,我将如何改变第一个动作的速度,而当节点向下移动以加速时,我将如何改变第二个动作的速度? 您也许可以使用 SKAction timingMode,这允许各种模式,包括 ... ease-in(即 Ease-in pacing 会导致动画开始缓慢,然后随着它的进行而加速)或缓出(缓出节奏会导致动画快速开始,然后在完成时变慢)。 >>> 在 Apple SKAction 类参考中查找 timingMode。 developer.apple.com/library/mac/documentation/SpriteKit/… 【参考方案1】:查找SKActionTimingMode
的各种类型,并根据需要将它们应用于您的情况。这将消除对 [SKAction speedTo:0.1 duration:0.5]
之类的任何内容的需求。
https://developer.apple.com/library/mac/documentation/SpriteKit/Reference/SKAction_Ref/Reference/Reference.html#//apple_ref/c/tdef/SKActionTimingMode
您可以将SKActionTimingEaseOut
用于使节点向上移动的操作,将SKActionTimingEaseIn
用于使节点向下移动的操作。
SKAction *actionMoveUp = [SKAction moveToY:2 * node.size.height / 3 duration:0.5];
actionMoveUp.timingMode = SKActionTimingEaseOut;
SKAction *actionMoveDown = [SKAction moveToY:node.size.height / 2 duration:0.5];
actionMoveDown.timingMode = SKActionTimingEaseIn;
SKAction *actionMoveUpHalf = [SKAction moveToY:node.size.height duration:1];
actionMoveUp.timingMode = SKActionTimingEaseOut;
[node runAction:[SKAction repeatActionForever:
[SKAction sequence:@
[actionMoveUp,
actionMoveDown,
actionMoveUpHalf,
actionMoveDown]]]];
【讨论】:
以上是关于iOS 7 Sprite Kit 动画速度变化的主要内容,如果未能解决你的问题,请参考以下文章