ついでなので、インスタンス系(なんて言えばいいかわからないけど制御とか実行系とか)も自分の為にもまとめておきます。いっつも忘れて英語のページを見に行くってことばかりしてるんで(´・ω・`)
ちなみに、今まで以下のアクションをまとめました(あとで探す時用リスト)。
- 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;
}
他にもイージングアクションやパラパラ漫画風のアニメーションの作成などもあるけど、それはまた別の機会にします。
