我有一个正在为 SKSpriteNode
动画的 runAction
。我的节点在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。
问题:如何随着节点移动而改变节点的速度,而不是每个方向的停滞速度。
预先感谢。
查找各种类型的SKActionTimingMode
,并根据需要将其应用于您的情况。这将消除对[SKAction speedTo:0.1 duration:0.5]
等任何事物的需求。
https://developer.apple.com/library/mac/documentation/spritekit/reference/skaction_refere/reference/reference/reference.htmll#/apple_refle_reff/c/tdef/skaction/skactiontimingtimingmode
您可以将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]]]];