2014-02-06 78 views
2

我有一个runAction这是动画SKSpriteNode。我有节点在repeatActionForever中上下移动。我希望节点在节点向上移动时放慢速度,并在节点向下移动时加速。iOS 7 Sprite Kit动画改变速度

[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速度即使我添加了一个第二speedTo动作这将增加速度,以0.5秒后运行1.

问题:如何在节点移动时更改节点的速度,而不是每个方向的停滞速度。

在此先感谢。

+0

我认为一旦速度等于0,动作停止运行,节点就会有效暂停。 – LearnCocos2D

+0

这是正确的。感谢您指出了这一点。 – buczek

+0

我会如何改变第一个动作的速度,当它向上移动时变慢,第二个动作时节点向下移动以加速? – buczek

回答

6

查找各种类型的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]]]];