cocos2d-x 瞬時動作/延時動作
第一部分:動作概述
動作可以說構成了cocos2dx的精華(你看動作類有多少子類就知道了)。
動作是什麼?動作可以理解為指令,這些指令由節點執行。
動作由節點(node)執行,該節點執行動作的時候,他的所有子節點跟著執行,這一特性是非常有用的。
執行動作的程式碼非常簡單,先生成,然後讓節點執行:
?1 2 |
CCAction
*action=....
node->runAction(action);
|
CCAction及其子類的繼承樹非常龐大,我們需要一個一個介紹。
CCAction及其子類簡圖:
第二部分:CCActionInstant家族(立即動作)
立即動作就是不需要時間,馬上就完成的動作。立即動作的共同基類是CCActionInstant。CCActionInstant的常用子類有:
CCFlipX:X軸翻轉、CCFlipY:Y軸翻轉
CCHide:隱藏、CCShow:顯示、CCToggleVisibility:切換可視性
CCPlace:放置到一個位置
CCCallFunc家族:回撥函式包裝器
這些類的使用非常簡單,就不說了
第三部分:CCCallFunc家族(回撥函式包裝器)
CCCallFunc是CCActionInstant的子類,是非常重要的一個類族,就是介面卡。用大白話說,就是做了一層包裝,把函式包裝成動作,這樣你在執行動作的時候,就可以執行函數了。聽起來很怪異嗎?為什麼不直接執行函式呢?這是因為執行條件不同。
我們看個例子:玩家死亡動畫(也是個動作)播放完成後,結束遊戲。
?1 2 3 4 5 6 |
CCAction
*sequneceAction = CCSequence::actions(
getAnimate(), //獲得死亡動畫,自己實現的函式
CCCallFunc::actionWithTarget( this ,
callfunc_selector(Hero::deadDoneCallback)), //結束遊戲用的回撥
NULL);
this ->runAction(
); |
//回撥函式的定義
?1 2 3 4 5 6 |
void
Hero::deadDoneCallback()
{
this ->setIsVisible( false ); //設定節點隱藏,讓cocos2dx自身清理,而不是馬上清理。
CCScene
*scene=GameOverScene::scene();
CCDirector::sharedDirector()->replaceScene(CCTransitionFade::transitionWithDuration(1.2f,scene));
}
|
其他的程式碼先不用管它,我們重點是:
?1 |
CCCallFunc::actionWithTarget( this ,
callfunc_selector(Hero::deadDoneCallback);
|
cocos2dx中,一般物件都是採用靜態方法生成的,我們看這個函式簽名:
?