【Cocos2d-x】アニメーションその2

【Cocos2d-x】アニメーションその2

前回の続きです。

アニメーション中の任意のタイミングでメソッドを呼び出したい時にCallFuncを使います。

void HelloWorld::startAnimation(float dt) {
    for (int i = 0; i < (int)_items.size(); i ++) {
        Sprite *item = _items.at(i);
        item->runAction(Sequence::create(Blink::create(2.0f, 5),
                                         CallFunc::create(CC_CALLBACK_0(HelloWorld::callFuncTest, this)),
                                         MoveBy::create(3.0f, Vec2(100, 200)),
                                         CallFuncN::create(CC_CALLBACK_1(HelloWorld::callFuncNTest, this)),
                                         nullptr));
    }
}

void HelloWorld::callFuncTest() {
    log("CallFuncTest");
}

void HelloWorld::callFuncNTest(cocos2d::Ref *ref) {
    Sprite *itemSprite = dynamic_cast<Sprite*>(ref);
    log("Point:(%f, %f)", itemSprite->getPosition().x, itemSprite->getPosition().y);
}

点滅の後、移動の後で、それぞれこのようなログが表示されたと思います。
beginner14-1

また、CallFunc、CallFuncNは以下のように記述することもできます。

void HelloWorld::startAnimation(float dt) {
    for (int i = 0; i < (int)_items.size(); i ++) {
        Sprite *item = _items.at(i);
        item->runAction(Sequence::create(Blink::create(2.0f, 5),
                                         CallFunc::create([this](){
            log("CallFunc");
            this->callFuncTest();
        }),
                                         MoveBy::create(3.0f, Vec2(100, 200)),
                                         CallFuncN::create([this](Ref *ref){
            log("CallFuncN");
            this->callFuncNTest(ref);
        }),
                                         nullptr));
    }
}

void HelloWorld::callFuncTest() {
    log("CallFuncTest");
}

void HelloWorld::callFuncNTest(cocos2d::Ref *ref) {
    Sprite *itemSprite = dynamic_cast<Sprite*>(ref);
    log("Point:(%f, %f)", itemSprite->getPosition().x, itemSprite->getPosition().y);
}

ログはこのようになります。
beginner14-2

これで、アニメーション中に任意のメソッドを呼び出せるようになりました。
次回もアニメーションについてです。

今回は以上です。

 

  • このエントリーをはてなブックマークに追加
  • Pocket

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

CAPTCHA