【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); }
点滅の後、移動の後で、それぞれこのようなログが表示されたと思います。
また、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); }
これで、アニメーション中に任意のメソッドを呼び出せるようになりました。
次回もアニメーションについてです。
今回は以上です。
この記事へのコメントはこちら