2014-02-06 107 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]]]];