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

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

Cocos2dxには様々なアニメーションメソッドが用意されています。よく使うものリストアップすると、

MoveTo,MoveBy(移動)
RotateTo,RotateBy(回転)
JumpTo,JumpBy(ジャンプ)
FadeIn(フェードイン)
FadeOut(フェードアウト)
Hide(非表示)
Show(表示)
Blink(点滅)
DelayTime(待機)
CallFunc(メソッド呼び出し)
CallFuncN(アニメーション対象を引数に渡してメソッド呼び出し)
RemoveSelf(消去)

などがあり、これらをSequenceやSpawnと組み合わせて使用するのが一般的です。

例を、前回の記事の続きでやってみます。

class HelloWorld : public cocos2d::Layer
{
    //略...

    void startAnimation(float dt);
    void callFuncTest();
    void callFuncNTest(Ref *ref);
};

 

bool HelloWorld::init()
{
    //略...

    this->scheduleOnce(schedule_selector(HelloWorld::startAnimation), 2.0f);

    return true;
}

void HelloWorld::startAnimation(float dt) {
    for (int i = 0; i < (int)_items.size(); i ++) {
        MoveBy *moveBy = MoveBy::create(3.0f, Vec2(100, 200));
        JumpBy *jumpBy = JumpBy::create(1.0f, Vec2(-80, -30), 200, 2);
        RotateBy *rotateBy = RotateBy::create(2.0f, 380);
        MoveTo *moveTo = MoveTo::create(4.0f, Vec2(100, 100));
//rotateByとmoveToを同時にアニメーションします
        Spawn *spawn = Spawn::create(rotateBy, moveTo, nullptr);
        DelayTime *delay = DelayTime::create(1.0f);
        RemoveSelf *removeSelf = RemoveSelf::create();
//moveBy→jumpBy→spawn→delay→removeSelfを順番に実行します
        Sequence *sequence = Sequence::create(moveBy, jumpBy, spawn, delay, removeSelf, nullptr);
        
        Sprite *item = _items.at(i);
        item->runAction(sequence);
    }
}

void HelloWorld::callFuncTest() {
    
}

void HelloWorld::callFuncNTest(cocos2d::Ref *ref) {
    
}

アニメーションはこのようになります。

アニメーション部分はひとつに纏めるとこうなります。

void HelloWorld::startAnimation(float dt) {
    for (int i = 0; i < (int)_items.size(); i ++) {
        Sprite *item = _items.at(i);
        item->runAction(Sequence::create(MoveBy::create(3.0f, Vec2(100, 200)),
                                         JumpBy::create(1.0f, Vec2(-80, -30), 200, 2),
                                         Spawn::create(RotateBy::create(4.0f, 600),
                                                       MoveTo::create(4.0f, Vec2(100, 100)),
                                                       nullptr),
                                         DelayTime::create(1.0f),
                                         RemoveSelf::create(),
                                         NULL));
    }
}

 

MoveToとMoveByの違いや、SequenceとSpawnの使い方が理解できたと思います。
次回はCallFuncについて説明します。

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

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

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

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

CAPTCHA