2013年03月14日

cocos2d-xで同時、順次、関数後起動のアニメーションを試してみました。

Cocos2d-xでiPhoneとAndroid同時リリースがんばるぞ〜。
っていつ完成する事やら。。

前回、さまざまなアニメーション移動を調べましたので
今回はアニメーションの組み合わせ方に関して調べてみたいと思います。

まず複数同時にアニメーションしたい場合はCCSpawnというのを使うようです。

↓サンプル↓

// 右方向に2回ジャンプと同時に、右に90度づつ回転
CCFiniteTimeAction* jump = CCJumpBy::create( (float)1.0, ccp(44,0), 100, 2 );
CCFiniteTimeAction* rotate = CCRotateBy::create( (float)1.0, (float)90.0 );
CCSpawn* spawn = CCSpawn::create( jump, rotate, NULL);
this->animationSprite->runAction( spawn );


右に蹴られた缶が右に転がる感じみたいですね。


続いて連続してアニメーションを起こすには
CCSequenceというのを使うようです。
さっきのアニメーションの続きに拡大するアニメーションを追加しました。

↓サンプル↓

// 右方向に2回ジャンプしつつ、右に90度づつ回転
CCFiniteTimeAction* jump = CCJumpBy::create( (float)1.0, ccp(44,0), 100, 2 );
CCFiniteTimeAction* rotate = CCRotateBy::create( (float)1.0, (float)90.0 );
CCSpawn* spawn = CCSpawn::create( jump, rotate, NULL);

// その後、2.4倍に膨らむ!
CCFiniteTimeAction* scaleUp = CCScaleBy::create( (float)0.5, (float)2.4 );
CCSequence *squence = CCSequence::create( spawn, scaleUp, NULL );
this->animationSprite->runAction( squence );



最後に全てのアニメーションが終わった後に
関数を起動するようにしてみます。
CCCallFuncN を使えば
CCSequenceの順番待ちしているアニメーションの処理の中に
関数を追加出来ます。


↓サンプル↓

// 右方向に2回ジャンプしつつ、右に90度づつ回転
CCFiniteTimeAction* jump = CCJumpBy::create( (float)1.0, ccp(44,0), 100, 2 );
CCFiniteTimeAction* rotate = CCRotateBy::create( (float)1.0, (float)90.0 );
CCSpawn* spawn = CCSpawn::create( jump, rotate, NULL);

// アニメーション後に 関数を起動する
CCFiniteTimeAction* actionMoveDone =CCCallFuncN::create( this,
callfuncN_selector(Game::nextProc));

CCSequence *squence = CCSequence::create( spawn, actionMoveDone, NULL );
this->animationSprite->runAction( squence );



この例はアニメーション終了後に
nextProc関数を起動します。

色々出来て便利ですね!!



posted by itokami1123 at 17:58| Comment(0) | 日記