【cocos2dx】複数のオブジェクトに対して同じCCActionクラスを実行させる

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]

こうすれば、コードが短くなりわかりやすくなります。