・CCSpawn(アクションの同時実行)を追加しました。
・CCAction
あらかじめアクション(指定ポイントへ動け、とか回転しろ、とか)を設定しておけば、runActionで指定のスプライトにそのアクションを実行させることができます。
移動や回転、点滅やフェードインなど様々なアクションが用意されており、
画像さえ用意しておけばなんとアニメーションまで出来てしまいます!
果てはファンクションの実行まで組み込むことが可能な素敵なコマンド。
かなり素敵なコマンドです。
大事な事なので二回言いました。
実行例は以下のとおり。※sprite は既に設置したスプライトです。これにアクションをしてもらいます。
1.普通のアクション
回転や移動、透明度の変更など色々あります。
基本的にアクションの種類と動きが終わるまでの時間を指定します。
//CCMoveTo: この場合、画面位置(240,240)の位置まで2秒かけて移動する。
id act_move = [CCMoveTo actionWithDuration: 2 position:ccp(240,240)];
//CCRotateTo:指定の角度540°まで2秒かけて回転する。
id act_rote = [CCRotateTo actionWithDuration: 2 angle: 540]
//act_move、act_roteを順に実行していく。
id action = [CCSequence actions: act_move, act_rote , nil];
//上記で作成したアクションを実行
[sprite runAction: action];
//act_move、act_roteを同時に実行する。
id action2 = [CCSpawn actions: act_move, act_rote , nil];
//上記で作成したアクションを実行
[sprite2 runAction: action2];
CCSequenceはそれぞれのアクションを順に実行するので、移動してから回転する形になります。
CCSpawnは移動しながら回転する形。
用途によって使い分けが出来ます。
2.アニメーション
用意しておいた画像をフレームとして設定する事で、
画像を順に表示させていくアニメーションを作る事ができる。
用意した画像がこれです。60×30の画像で、
左と右の画像を交互に繰り返して表示するとアニメーションになります。
※位置が微妙にずれている可能性があるので、
この画像を使っても綺麗なアニメーションにはならない・・・かもです。
実装はこんな感じ。
CCAnimation *frame; //アニメーションデータ
NSMutableArray *ns_frames; //フレーム格納用の配列
ns_frames = [NSMutableArray array]; //配列の初期化
//配列にフレームを追加していく
//画像の左半分を1フレームとして追加
[ns_frames addObject:[CCSpriteFrame frameWithTexture:
[sprite texture] rect:CGRectMake( 0,0,30,30)];
//画像の右半分を次の1フレームとして追加
[ns_frames addObject:[CCSpriteFrame frameWithTexture:
[sprite texture] rect:CGRectMake( 30,0,30,30)];
//アニメーションにフレーム配列を追加
frame = [CCAnimation animationWithFrames:ns_frames delay:0.15f];
//アニメーションをアクションとして設定
id anim = [CCAnimate actionWithAnimation: frame];
//アニメのアクションをアクション実行用データに追加
id act = [CCSequence actions:anim, nil];
//アクション実行用データを無限に繰り返し
id repeat_act = [CCRepeatForever actionWithAction:act];
//スプライトにアクション実行
[sprite runAction: repeat_act];
用は左半分と右半分を交互に表示しろっていう命令ですね。
実行するとこんな感じになるはずです。やっほい。
3.ファンクション実行
アクションのうちの一つして、関数を実行する事が出来る。
スプライトの透明度を下げていくアクションを行い、
そのアクションが終わった段階でスプライトを破棄したい時などに使える。
//self= レイヤーのcallFuncという関数を実行するアクション
id act_func =[CCCallFunc actionWithTarget:self selector:@selector(callFund)];
id act = [CCSequence actions:act_func, nil];
[sprite runAction: act];
・・・
//呼ばれる関数
-(void)callFunc
{
///
}
・
・
・
以上が大まかなアクションの種類でしょうか。
特にアニメーション実行に関してはすごくお世話になっています。
また、キャラクターのアニメーションの合間に
ファンクション呼び出しを挟むこともできるので、
・攻撃アニメーション1(振りかぶり)
・キャラクターの攻撃判定フラグON
・攻撃アニメーション2(振り下ろし)
・キャラクターの攻撃判定フラグOFF
なんてことも出来てしまいます。
「当たり判定のタイミングがアニメーションに従って精密に取れる」
ので、ゲーム自体の動きの質がちょと上がりました。
本日は以上です。
読んでくれる方には本当に感謝です。
ペタいただけるとやる気増しますので
こんなのもよろしくお願いします。