初探CCAction(動作)

cocos2d-x爲我們提供了相當方便的動作製作。主要有兩種:瞬時動作(基類CCActionInstanse)和延時動作(基類CCActionInterval)。我估計大部分人關心的都是延時動作,因爲有動感,才能稱爲動作嘛。

延時動作中,有很多種類型:移動(CCMoveTo,CCMoveBy),旋轉(CCRotateTo,CCRotateBy),變形(CCScaleTo,CCScaleBy),跳躍(CCJumpTo,CCJumpBy)等動作。具體可以到http://www.cocos2d-x.org/embedded/cocos2d-x/d7/d12/classcocos2d_1_1_c_c_action.html查看。

實現動作的方法:

1,創建動作綁定結點(代碼來自官方的Test工程)

 m_grossini = CCSprite.spriteWithFile(TestResource.s_pPathGrossini);

2,定義動作

CCActionInterval actionTo = CCMoveTo.actionWithDuration(2, new CCPoint(s.width - 40, s.height - 40));

3,動作執行

 m_grossini.runAction(actionTo);

上面的就可以完成一個簡單的移動動作。

通過研究Test工程。動作的完成主要是由每個動作類的actionWithDuration(在規定條件內完成動作),和reverse(恢復,反過來執行一遍動作)來完成。

比如上面的定義動作的方法,就是在2秒內移動到距離右上角(40,40)的地方。如果還要返回到原位,用原來的軌跡。那麼修改爲如下:

CCActionInterval actionTo = CCMoveTo.actionWithDuration(2, new CCPoint(s.width - 40, s.height - 40));
m_grossint.runAction(CCSequence.actions(actionTo,actionTo.reverse()));

動作的合成主要靠CCSequence(類似隊列,按照順序執行動作),CCRepeatForever(無限重複動作),CCRepeat(有限重複動作)等完成。

CCSequence用法:

CCActionInterval actionTo = CCMoveTo.actionWithDuration(2, new CCPoint(s.width - 40, s.height - 40));
m_grossint.runAction(CCSequence.actions(actionTo,actionTo.reverse()));
動作執行順序就是先執行actionTo,再執行action.reverse()這個動作,其實CCSequence也有Reverse這個方法。那動作的執行順序就是從後面到前面了。

CCRepeatForever用法:

static CCRepeatForever actionWithAction  ( CCActionInterval   pAction ) 

例子:m_grossint.runAction(CCRepeatForever.actionWithAction(CCSequence.actions(actionTo,actionTo.reverse())));

CCRepeat的用法和CCRepeatForever的用法類型。就是多了個time(次數)這個參數。


那麼,複雜的動作怎麼實現呢,那得靠你的想象力了。怎麼把簡單的動作組合到一塊。

複雜的動作基本都是靠CCSequence,CCRepeat等組合起來使用,具體例子可以看官方的test工程。裏面提供了大量的例子。我就不在這裏展示了。

   





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章