CCActionクラスはcocos2dの特徴でもあり、ゲームを作る際に使うととても便利です。 今回は、複数のオブジェクトに「同じCCActionクラス」を実行させる方法をブログに書いていきたいと思います。
copyを使う
結論から言いますとcopyを使って、複数のCCActionクラスを作成します。
一度作成したCCActionクラスは1回しか利用ができません。 例えば、4つのオブジェクトに同じようなアクションを行う際には、CCActionをオブジェクトと同じ数だけ用意しなければいけません。 動かすことができますが、コードが長くなります。
[例]一つのオブジェクトの場合 [c]
CCSprite *sprite1;
CCDelayTime *time = CCDelayTime::create(0.0f);
CCScaleTo *scale = CCScaleTo::create(0.1f, 1.0f);
CCSequence *sq = CCSequence::create(time,scale,NULL);
sprite1->runAction(sq);
[/c]
そこで利用できるのがcopy()です。 これを使えば、CCActionクラスを複製して利用ができます。
[追記] copy()を使うときには、メモリー管理にも注意。 autorelease()を使わないとメモリーリークの原因になります。
[c]
CCSprite *sprite1;
CCSprite *sprite2;
CCSprite *sprite3;
CCSprite *sprite4;
CCDelayTime *time = CCDelayTime::create(0.0f);
CCScaleTo *scale = CCScaleTo::create(0.1f, 1.0f);
CCSequence *sq = CCSequence::create(time,scale,NULL);
sprite1->runAction((CCSequence*)sq->copy()->autorelease());
sprite2->runAction((CCSequence*)sq->copy()->autorelease());
sprite3->runAction((CCSequence*)sq->copy()->autorelease());
sprite1->runAction(sq);
[/c]
こうすれば、コードが短くなりわかりやすくなります。