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


(1)クラスのメソッド構成の見直し
これらを作るためにまずクラスのメソッドの構成を見直しました。
本にあるシューティングゲームを土台にしているのですが、当たり判定メソッドcheckCollectionはEnemyからEnemyControllerに移し、敵同士の当たり判定を行うようにしました。
これは総当たりで当たり判定を行うため、Enemyでは他の敵のデータが取得しづらいためです。
EnemyControllerで行えばすでにある配列enemiesから高速列挙で取得すればいいわけですからね。
また、タッチ用のレイヤー(interfaceLayer)はbaseLayer内ではなく、baseLayerの上に置きました(つまりGameSceneにaddChild)。
矢印などの操作ボタンをinterfaceLayer上に置いており、自機がぶつかったときにボタンまでは画面が揺れないようにするためです。
異なる方法で実現することもできると思いますがこれが一番簡単かとこのようにしました。
(2)スピードについて
スピードについてはその1からの懸念事項でしたがやはり難しいです。
重力による等加速度運動を作ってみようとしたのですが、変数として重力加速度Gを設定したらなぜか複数の敵クラスのインスタンスで同じ値を参照することになってしまい、まるで惑星の連星運動のような動きになってしまいました。
変数Gをスコープを考慮せずに宣言していたのですが、別な敵クラスのインスタンスを引き継ぐなんてあり得るのでしょうか?
ふだん使っているVisual Basicとは勝手が違うので難しいです。
もう一度Objective-Cのクラスや変数のスコープについて学ぶ必要を感じました。
また動きは単に動いているという感じで安物のミニカーを動かす感じです。
質感のある高級な動きを目指したいものです。
(3)衝突の当たり判定とパーティクルについて
本のゲームでは当たり判定は「敵と実機(地面含む)」「敵とビーム」の2種類です。
一方、てぃーが作っているアクションゲームでは「敵同士」「敵と実機」「敵とビーム(剣)」となります。
つまり、「敵同士」が新たに加わるのですが、敵を画面によっては20個ほど出そうかと思っていてそのための当たり判定が大変です。。。
updateメソッドでCGRectIntersectsRect(2つの矩形(くけい)が重なればYESを返す)を使って判定をしているのですが、敵が3つ以上になると処理が重くなってしまいました。

本にも
>当たり判定は、それについてだけで書かれた本もあるほどの深い話題です。
>紹介した方法はあくまで1つの手法として考えてください。(214ページ)
とあったのでグーグルで「当たり判定」(衝突判定)を検索してみました。
それによるとだいたい次のようなことが大切であると分かりました。
・すべての物体で当たり判定を調べるのではなく、ある領域にのみ注目して調べる
・ベクトルの概念
・3Dの場合はさらに内積、外積
う~ん、確かに奥が深いですね(滝汗)
でもテーマとしてはおもしろそうです♪(←楽観的)
当たり判定については今後じっくりと勉強していきたいと思います。
ただいろいろ試してみたところ、今回の処理の重さは当たり判定を行う数が多いということよりも衝突時に出すパーティクルの処理によるようです。
パーティクルをやめれば処理は軽くなるのですがそれではゲームとしてつまらないですよね。
やっぱ、ゲームは見た目が大事ですから!!!
パーティクルの種類や表示時間を見直す必要が出てきました。
以上、動きについてやりましたが難しいですね。
こういう面倒なことはcocos2dが自動でやってくれればいいのに。。。
(もしかしたらそういうものがすでに用意されているかもしれませんが)
今回のことは微妙なチューニングを随時続けていき、いいアプリにしたいものです。
今後もまだ適用できないものを順次やっていきます。
これだけの良本ですからものにしないともったいないですね。
↓この記事が参考になったら拍手をクリックお願いします。今後のブログ作りに役立てたいので。
- 関連記事
-
- 【勉強】「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)
- 【勉強】「cocos2d for iPhone レッスンノート」で得たことを自作アクションゲームへ反映(その1、敵クラスやupdateメソッドについて) (2011/11/09)