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 动画速度变化的主要内容,如果未能解决你的问题,请参考以下文章

Sprite Kit 加载速度慢

如何根据平移手势速度向 Sprite Kit 节点应用角脉冲

以一定速度在屏幕上移动对象。(Sprite Kit)

使用 Sprite Kit 画线时播放声音

在 Sprite Kit iOS 中使用一个图像精灵表

iOS 7 Sprite Kit 释放内存