paranitips

Never stop learning! がモットーのゆるふわエンジニアブログ

cocosbuilderのアニメーション終了時に何か処理を実行したい

cocosbuilderでタイムラインを作成してアニメーションさせたとき、その終了時に処理を実行したい場合はCCBAnimationManagerDelegateを使います。

// GameLayer.h

class GameLayer
: public CCLayer
, public CCBAnimationManagerDelegate // CCBAnimationManagerDelegateを継承
{
public:
    // アニメーションマネージャーを準備
    CCBAnimationManager* mAnimationManager;
    
    GameLayer();
    virtual ~GameLayer();
    CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(GameLayer,create);
    void setAnimationManager(CCBAnimationManager *pAnimationManager);

    // アニメーション終了時に呼ばれるメソッド
    virtual void completedAnimationSequenceNamed(const char *name);
        
};
// GameLayer.cpp

// アニメーション終了時の処理
void GameLayer::completedAnimationSequenceNamed(const char *name)
{
    // タイムラインによって処理を分ける
    if(strcmp(name,"CountDown") == 0)
    {
        this->startGame();
    }
    else if (strcmp(name, "GameOver") == 0)
    {
        this->goToScoreScene();
    }
}

void GameLayer::setAnimationManager(CCBAnimationManager *pAnimationManager)
{
    CC_SAFE_RELEASE_NULL(mAnimationManager);
    mAnimationManager = pAnimationManager;
    CC_SAFE_RETAIN(mAnimationManager);
    mAnimationManager->setDelegate(this); // デリゲートを設定する
}

参考