ついでなので、インスタンス系(なんて言えばいいかわからないけど制御とか実行系とか)も自分の為にもまとめておきます。いっつも忘れて英語のページを見に行くってことばかりしてるんで(´・ω・`)
ちなみに、今まで以下のアクションをまとめました(あとで探す時用リスト)。
- CCMoveBy(CCMoveTo)移動
- CCScaleBy(CCSkaleTo)サイズ変更
- CCJumpBy(CCJumpTo)ジャンプ
- CCRotateBy(CCRotateTo)回転
- CCTintBy(CCTintTo)色合いの変更
- CCSkewBy(CCSkewTo)傾ける
- CCBlink 点滅
- CCFadeIn(CCFadeOut)フェードイン/アウト
- CCBezierBy(CCBezierTo)ベジェ曲線
- CCWaves 波立たせる
- CCWaves3D 立体的に波立たせる
- CCTwirl ひねりまわす
- CCLiquid 液体化
- CCPlase 瞬間移動
- CCDelayTime 待機(遅延処理)
- CCShow(CCHide) 表示/非表示
- CCCardinalSplineBy(CCCardinalSplineTo)スプライン曲線
- CCCatmullRomBy(CCCatmullRomTo)Catmull-Romスプライン曲線
- CCOrbitCamera カメラの旋回
- CCFlipX(CCFlipY)瞬時に反転
- CCFlipX3D(CCFlipY3D) くるりと反転
- CCLens3D 虫眼鏡
- CCRipple3D 波紋を広げる
- CCShaky3D(CCShakyTiles3D) 細かくしてシェイク
- CCToggleVisibility 表示/非表示のトグル
- CCPageTurn3D ページをめくる
- CCShuffleTiles タイル状にして並び替え
- CCFadeOutTRTiles(CCFadeOutBLTiles) タイル状に斜めにフェードアウト
- CCFadeOutUpTiles(CCFadeOutDonwTiles) タイル状に縦にフェードアウト
- CCTurnOffTiles タイル状にぽこぽこフェードアウト
- CCWavesTiles3D タイル状になってウェーブ
- CCJumpTiles3D タイルがもこもこする
- CCSplitRows(CCSplitCols) 短冊状になって左右に消えてく
- CCShatteredTiles3D くだける
アクションの制御
いままではアクションの単体を取り上げたので、次はアクションを繋げたり何度も実行したりする「制御」に関して。
制御には以下のクラスがあるみたい。
- CCSequence —順番に実行していく
- CCSpawn —同時に実行する
- CCRepeat —同じ動作をn回実行
- CCRepeatForever —同じ動作をずっと実行
- CCReverseTime —巻き戻し(終了から開始のエフェクト)
pSprite->runAction(CCSequence::create(CCMoveBy::create(...),CCMoveBy::create(...),CCScaleBy::create(...),NULL)); pSprite->runAction(CCSpawn::create(CCMoveBy::create(...),CCScale::create(...),NULL)); pSprite->runAction(CCRepeat::create(CCJumpBy::create(...),5)); pSprite->runAction(CCRepeatForever::create(CCJumpBy::create(...))); pSprite->runAction(CCReverseTime::create(CCPageTurn3D::create(...)));
もちろんすべてがアクションと同じインターフェイスを実装してるんで、CCSequenceとCCSpawnを組み合わせたりもできます。
ただ組み合わせ次第ではちゃんと動作しない場合もあるっぽい。
アニメーション中に処理を実行
いろいろな処理を実行するようなクラスもあります。それらもすべて同じインターフェイスを実装してるので、runActionで呼び出したりできます。
以下のものがあるみたい。
- CCCallFunc—引数のないメソッド呼び出し
- CCCallFuncN—runActionで呼び出したCCNodeを引数に持つメソッド呼び出し
- CCCallFuncND —CCNode+データを引数にメソッド呼び出し
- CCCallFuncO —指定したCCObjectを引数に持つメソッド呼び出し
- CCRemoveSelf —runActionした子を自分で削除させる
- CCTargetedAction —指定した子にアクションさせる
CCRemoveSelfとCCTargetedActionは簡単に呼び出せる上にいろいろと連携がとれて便利ですね。いや、全部便利だけど。
CCCallFuncなどを使う場合、callfunc_selector(callfuncN_selector、callfuncND_selector、callfuncO_selector)を使用します。
長いけど、使い方としてはおよそこんな感じ。
それぞれの作成時に指定してるthisは、そのメソッドがあるインスタンスを指定してるって感じです。
void Test::method(){ //アクションさせたいスプライト作成 CCSprite* pSprite = CCSprite::create("test.png"); //CallFuncOで投げるものを作成 CCString* pStr = CCString::create("test"); //targetedActionで動かしたいスプライト作成 CCSprite* pTarget = CCSprite::create("test2.png"); this->addChild(pSprite); this->addChild(pTarget); pSprite->runAction(CCSequence::create( CCCallFunc::create(this , callfunc_selector(Test::callfunc)), CCCallFuncN::create(this , callfuncN_selector(Test::callfuncN)), CCCallFuncND::create(this , callfuncND_selector(Test::callfuncND) , (void*)100), CCCallFuncO::create(this, callfuncO_selector(Test::callfuncO) , pStr), CCTargetedAction::create(pTarget , CCMoveBy::create(30,30)), //pTargetがアクションする CCRemoveSelf::create(true), //最後自分を消す。trueの場合、掃除もさせる NULL )); } //CallFuncから呼び出される void Test::callfunc(){ } //CallFuncNから呼び出される。この引数は実質はpSprite void Test::callfuncN(CCNode* sender){ CCSprite* sprite = (CCSprite*)sender; } //CallFuncNDから呼び出される。void* は何でも入る子らしい。 void Test::callfuncND(CCNode* sender , void* datas){ CCSprite* sprite = (CCSprite*)sender; int i = (int)datas; } //CallFuncOから呼び出される。 void Test::callfuncO(CCObject* obj){ CCString* str = (CCString*)obj; }
他にもイージングアクションやパラパラ漫画風のアニメーションの作成などもあるけど、それはまた別の機会にします。