rabbit-dev

現役スマフォプログラマーが適当にプログラム関係の記事を放り込むブログ

アニメーション完了後のコールバック設定方法

Cocos2dxでrunActionを利用してアニメーションをする場合、アニメーション完了後にコールバックを設定したい場合があります。(例えば、アニメーション完了後に削除するとか)

その場合、どのようにしたら設定できるかぐぐってみたところscheduleでアニメーション時間と同じ時間を設定するといったちょっと引っかかる方法でした。他に方法がないかサンプルプログラムとか調べてみたところrunActionにコールバックを設定できることが分かりましたので書き留めておきます。

 

コールバック設定

FiniteTimeAction* actionMove = MoveTo::create( 3.0f, Point( trap->getContentSize().width * -1 , offset_height) );

FiniteTimeAction* actionMoveDone = CallFuncN::create( CC_CALLBACK_1(GameMainScene::spriteMoveFinished, this));

trap->runAction( Sequence::create(actionMove, actionMoveDone, NULL) );

  

コールバックの設定は2行目のGameMainScene::spriteMoveFinishedというところ。設定したコールバックを3行目のrunActionで指定する形。意外と簡単だった。

 

 

コールバック関数実装

関数の引数はNodeポインタ。これをSpriteにキャストすることで、アニメーションが完了したSpriteを取得することが出来ます。

void GameMainScene::spriteMoveFinished(Node* sender)

{

Sprite *sprite = (Sprite *)sender;

this->removeChild(sprite, true);

 

}

 

上記の例ではアニメーションが完了したSpriteを削除するコードです。

 

今日はこの辺で、、、