CCActionクラスはcocos2dの特徴でもあり、ゲームを作る際に使うととても便利です。
今回は、複数のオブジェクトに「同じCCActionクラス」を実行させる方法をブログに書いていきたいと思います。
copyを使う
結論から言いますとcopyを使って、複数のCCActionクラスを作成します。一度作成したCCActionクラスは1回しか利用ができません。
例えば、4つのオブジェクトに同じようなアクションを行う際には、CCActionをオブジェクトと同じ数だけ用意しなければいけません。
動かすことができますが、コードが長くなります。
[例]一つのオブジェクトの場合
1 2 3 4 5 6 |
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); |
そこで利用できるのがcopy()です。
これを使えば、CCActionクラスを複製して利用ができます。
[追記]
copy()を使うときには、メモリー管理にも注意。
autorelease()を使わないとメモリーリークの原因になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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); |
こうすれば、コードが短くなりわかりやすくなります。
