いぬでもわかる

iOSやCocos2dxが好きでときどきAndroid。できるだけ毎日何かしら書く事を目標に頑張る。

cocos2d-xでの複雑なアクション

ジャンプさせたり、移動させたりのアニメーションについて説明しました。
が、単独でのアニメーションを利用することは稀で、例えばジャンプと移動を合わせた複合的なアニメーションを使う事の方が多いと思います。
そんな複雑なアニメーションもcocos2d-xでは簡単に作る事ができます。

まず、アニメーションの変化量を直線的ではなく、カーブを描くように終わりと初めを緩やかに変化させたい場合にはCCEase〜を使います。
イージングの適用場所によってCCEaseInやCCEaseOutといったようにクラスの名前が変わります。
イージングを適用することでよりぽく動くようになると思います。

CCEaseInOut::create(CCActionInterval *pAction, float fRate)
第1引数にはイースイン、アウトを適用させるアクション、第2引数には変化量の割合

//200,200の移動を移動し始めと移動し終わりの変化量を緩やかにする。
CCEaseINOut* ease = CCEaseInOut::create((CCActionInterval*)CCMoveBy::create(1, ccp(200, 200)), 3);
sprite->runAction(ease);


次に、複数のアクションを連続して適用する場合にCCSequenceを使います。
CCSequenceインスタンスの生成時の引数に適用したいアクションを渡します。
CCSequence::create (CCFiniteTimeAction *pAction1,...)

//x,y軸それぞれに200移動した後、さらにx軸に100移動します
CCSequence* sequence = CCSequence::create(CCMoveBy::create(1.0, ccp(200, 200)), CCMoveBy::create(1.0, ccp(100, 0)), NULL)
sprite->runAction(sequence);


また、アニメーション終わりに特定のメソッドを呼び出したりすることもできます。

//x,y軸それぞれに200移動した後、HelloWorld::finishAnimationメソッドを呼び出します
CCSequence* sequence = CCSequence::create(CCMoveBy::create(1.0, ccp(200, 200)), CCCallFuncN::create( this, callfuncN_selector(HelloWorld::finishAnimation)), NULL)
sprite->runAction(sequence);

CCSequenceはアニメーションの連続再生ですが、CCSpawnを使う事で同時再生も行う事ができます。

CCSpawn* spawn = CCSpawn::create(CCMoveBy::create(1.0, ccp(200, 200)), CCRotateBy::create(1, 60), NULL);
sprite->runAction(spawn);