くまちゃんのiOS/Androidゲームプログラミング

マイペースでゲームつくってます。

要塞ステージ

できました。

やっぱりコレでしょ。一番テンション上がるのは。
絵は32x32ドットのパターンを11個組み合わせて作りました。
壁面を右3、上1下1左3、あと機械っぽい部分は打ち捨ててあったHDDの基板部分の接写を縮小してみました。まあそれっぽくなったかな、と。

あと、プログラムは予想していない展開になりました。

最初、何も疑問を持たずに配列にパターンを並べ、それをダラダラ描画してあとはY座標をひたすらマイナスして全体をスクロールするだけの単純な構造にしておりました。

もちろん、それでスクロールされるので、最初はよしイメージどおり、と思い、次にさあ、当たり判定にとりかかろう、としてふと手が止まったのです。

これまで、カベの当たり判定のプログラムを作ったゲームはすべて「箱庭」、ドラクエ方式、ザナドゥ方式いずれも広大なマップ配列の世界の中にプレイヤーもぽつねんと存在していたのでした。そして、カベの当たり判定はプレイヤーの座標をマップ配列座標に変換して、カベのあるなしを問い合わせていたのです。

ところが、今回はシューティングなのでそもそも箱庭を想定しておりません。プレイヤーを包み込む世界は無いのです。無限の宇宙なんですから(違)。いや、もちろん1ステージを箱庭として作ることは可能です。ながーいステージを作って。

でも、私のイメージでは、要塞ステージに突入するまではカベの無い宇宙での戦闘で、カベの当たり判定など気にせずに自由に敵を飛ばしてプログラムしたいのです。そして、途中からカベが登場するのです。

ここに至って、このパターンは今までプログラムしたことの無いパターンだ、と気づきました。

それから一晩うんうんうなって試行錯誤した結果、1画面分+1列のカベを当たり判定のある「キャラクター」として描画することで解決しました。要は、カベに見えてその実プログラムとしてはびっちり整列したザコ敵という訳です。+1列するのは、見切れる分です。1画面分+1の配列を用意し、そこにマップ配列からほいほいデータを転送していくわけですな。イメージとしては、1列分を射出し、32ドット動いたら2列目を発射、以下ループ、というものです。

こうすると、箱庭方式ではワールド座標を保持する必要があり、当たり判定がワールド座標当たり判定と画面座標当たり判定の2種類できて面倒だったのが、ガシガシ100個も200個も敵やら弾やらが飛び交う当たり判定しまくりのシューティングではそれは勘弁願いたい、と思っていたのでその点でも助かりました。

もちろん、グラディウスダライアスR-TYPEやらイメージファイトやらかつてのシューティング達がカベや背景の当たり判定をプログラム的にどうやって処理していたかは存じ上げませんし、解法も1つではないと思うのですが、まあこうして今手のひらの中で自分が構築した世界が動いているのは気持ちのいいものです。

でも疲れた。次はボスキャラかな。
t.co
f:id:tadakazu1972:20150329234305p:plain