【勉強】「cocos2d for iPhone レッスンノート」で得たことを自作アクションゲームへ反映(その4、連続アニメーションなど)
「cocos2d for iPhone レッスンノート」で得たことを自作アクションゲームに適用させて改良する記録です。
cocos2d for iPhoneレッスンノート
(2011/09/22)
加藤寛人、佐藤伸吾 他
商品詳細を見る
目次とサンプルのダウンロードはこちら。
18日(金)、20日(日)、21日(月)は次の7. と9.のプログラム上のひな形を作っていました。
(◯→適用済、△→途中、無印→まだ、色なし→前回分)
◯1. 敵クラス、主人公クラスを作り、それで出現させるようにする
△2. 乱数(CCRANDOM_0_1を使う)を発生させて最初の登場位置、スピードを調整する
◯3. 移動はupdateメソッドで行うようにする(最初から書くならばこちらの方が
楽だと思われるから)
△4. アイコン同士の衝突時はパーティクルで衝突を表現する
5. 衝突するたびに微妙に大きくなっていく(その方がゲームとしてスリルがあるはず)
△6. 主人公とアイコンが衝突したときは画面を揺らす表現をする
△7. 難易度別ステージ(シーンで作る)を設けてクリアできるようにする
8. サウンドを入れる
△9. オープニングを入れる
(1)全体の流れについて
最初の計画ではオープニングだけでしたが、エンディングのシーンも入れることにしました。
それによりクラスの構成を次のようにしました。

このゲームは本の第4章のシューティングゲームを参考にしてきたのですが、このシーンの遷移については第3章のノベルゲームを参考にしました。
ゲームを始めると、オープニング(OpeningScene)・ゲームのメイン(GameScene)・エンディング(EndingScene)の3つのシーンがあり、各シーンの中でさらに場面が変わるという構成です。
オープニング・エンディングともキャラのアニメーションでやろうと思っています。
(今のところは仮のナレーションとセリフだけですけど)

(2)難易度別ステージの遷移について
当初難易度別ステージはそれぞれをシーンで作ろうかと思っていたのですが、ゲームのメイン(GameScene)ですべて行うようにし、敵の数や背景画像を変えることで対応するようにしました。
ステージの遷移は各ステージの目的を達成したら扉が開いて次のステージに行くという、かなりベタな設定です!
その方が分かりやすいでしょうからね。
次のステージにキャラが動いていくのはアニメーションで表現しようと考えています。
(※画面の画像はすべて仮のものです。)

(3)別スプライト間の連続アニメーションについて(未解決)
上の(1)と(2)のためには、あるスプライトAのアニメーションが終わったらそれを受けて別なスプライトBのアニメーションを開始するという設定が必要になってきました。
例えば敵が消えたら扉が開くというようなものです。
同じスプライトAで連続してアニメーションをする方法はメジャーです。
<SpriteAがact1(移動)の後、act2(拡大)を行う方法>
id act1 = [CCMoveBy actionWithDuration:1.0f position:ccp(50,0)];
id act2 = [CCScaleBy actionWithDuration:0.5f scale:2.0f];
id seq = [CCSequence actions:act1, act2, nil];
[SpriteA runAction:seq];
ところがスプライトBがAの後にアニメーションする方法についてはすぐに見つけられませんでした。。。
いろいろ探した結果、次のページが見つかりました。
本当どうもありがとうございます。
→別々対象にACTIONを順番に動かせる方法 | SuperSuRaccoon's World
次のようにCCDelayTimeを使うことで実現できました。
<SpriteAのアニメーションの後、SpriteBがアニメーションを始める方法>
[SpriteB runAction:[CCSequence actions:
[CCDelayTime actionWithDuration:1.5f],
[CScaleBy actionWithDuration:2.0f scale:3.0f],
nil]];
CCDelayTimeで実行を遅らせる遅延時間を設定しています。
SpriteAのアニメーションはact1で1.0秒、act2で0.5秒の合計1.5秒かかるのでこれを遅延時間に設定しました。
ただこの方法だと連続するスプライト数が増えると最後の方のものの設定が面倒ですね。
また途中で時間を変えるとその後のものすべての時間を変える手間も発生してしまいます。
他の方法としてCCCallFuncを使って外部メソッドを呼び出す方法もあるみたいですが、どのように実装すれば連続アニメーションになるか今のところ謎です。。。
今後の課題ですね。。。
こういう連続アニメーションはゲームなら多用するわけできっといい方法があるはずなのですが。
その辺は開発者側としては公開したくはない秘密といった感じなのでしょうか?!
課題が山積みですが(大泣)、いつもやっていればいずれひらめくでしょう(←楽観的)
キャラのイラストの方もがんばりたいです。
↓この記事が参考になったら拍手をクリックお願いします。今後のブログ作りに役立てたいので。
- 関連記事
-
- 【勉強】「cocos2d for iPhone レッスンノート」で得たことを自作アクションゲームへ反映(その6、イラストとツイッターでのやり取り) (2011/12/01)
- 【勉強】「cocos2d for iPhone レッスンノート」で得たことを自作アクションゲームへ反映(その5、連続アニメーション2) (2011/11/30)
- 【勉強】「cocos2d for iPhone レッスンノート」で得たことを自作アクションゲームへ反映(その4、連続アニメーションなど) (2011/11/21)
- 【勉強】「cocos2d for iPhone レッスンノート」で得たことを自作アクションゲームへ反映(その3、動きについて) (2011/11/17)
- 【勉強】「cocos2d for iPhone レッスンノート」で得たことを自作アクションゲームへ反映(その2、ストーリーとキャラについて) (2011/11/12)