初心者のためのゲームプログラミング入門

プログラミングとゲームの杜

初心者のためのプログラミング入門 & ゲームプログラムの作り方入門

Processing 入門

24.潜水艦5 爆弾と敵の当たり判定

 

今回は「潜水艦4 爆弾投下と複数キーの操作」の続きです。

当サイトでは、私自身がサンプルを作ったときの順番で説明しています。
ですから途中で仕組みを変更することもあります。(前回のキー入力のように)
この方がプログラミングの仕方、考え方を理解してもらえるのではないか
と思っているからです。
そんな訳で説明が少し長くなりやすいです。

 

 

爆弾と敵との当たり判定をしよう

爆弾を投下できるようになったので、敵との当たり判定を入れます。
敵1つに対し6個の爆弾すべてと当たりをチェックします。
もし当たっていたら、存在を判定している変数に未使用となる値を入れます。
これで画面上に表示されなくなります。

 

爆弾と敵の当たり判定

 

実行してみましょう。
爆弾と敵が接触したら、どちらも消えるか確認します。

 

 

今までに何度か当たり判定の仕組みを説明してきましたので
ここでは簡単にx座標の部分だけで説明します。
当たり判定は、絵の形ではなく四角い範囲で行います。
変数に加算している数値は幅や高さです。

 

x座標の当たり判定の説明

 

x座標の判定にはAとBの2つが必要です。
(y座標が同じであると仮定します)
一番上と下の場合は、AまたはBどちらかがとなります。
爆弾と敵が重なっている状態ならば、AとBの両方がとなります。

これはy座標を中心に考えても同じことが言えます。
つまり、xとy座標あわせて4つの判断文がすべてのとき
爆弾と敵が重なっていると判断できるのです。

 

 

敵の爆発アニメを入れよう

爆弾と敵の当たり判定が入ったので、爆発アニメを入れます。
爆発の絵は2枚使って、交互に表示することで爆発しているように見せます。
まずはその準備です。
潜水艦の左右の絵の次に爆発の絵を入れます。
enemy [0] : 左向きの絵
enemy [1] : 右向きの絵
enemy [2] : 爆発の絵1
enemy [3] : 爆発の絵2

 

敵の爆発アニメを入れる

 

変数 ed を今まで 2 が未使用としていましたが、これを 4 にしました。
敵の移動( 86 行目)は今まで無条件に行いましたが、爆発中は移動させないので
生存しているとき( 0 か 1 の場合)のみとしました。

 

 

準備ができたので爆発アニメを入れます。
変数 ed はフラグとして、生存中(0と1)、爆発中(2と3)、未使用(4)の
3つに分類して使うことになります。

 

爆発アニメを入れる

 

爆発カウント ecnt で絵の切り替えを制御しています。
117 行目の計算で ed の値を 2 と 3 に切り替えています。
それぞれの変数がどのように変化しているのか分からないときは println を
使って確認してみると理解しやすくなると思います。

 

変数の内容が分からないときはデバッグ表示してみる

 

テストした後は println の行を削除しましょう
消さないと今後の説明と行数が合わなくなります。

 

 

それでは実行してみましょう。
爆弾と敵が当たり、爆発アニメに切り替わるのを確認します。

 

爆発アニメを入れる

 

 

敵の爆弾を表示しよう

次は敵が発射する爆弾を表示しましょう。
今までの作業と同じ手順なので、表示と移動をいっしょに作ります。

画像データの読み込みから、座標管理するための変数を用意するところまで
次のようになります。
爆弾の数は最大で 20 個とします。

 

敵の爆弾の準備

 

60 行目の関数 bombEnemyMove はこれから用意します。
これは爆弾の表示と移動をするためのものです。

発射するための関数 bombEnemyAdd も用意します。

 

敵の爆弾処理

 

前回のページを見てもらえば分かりますが、プレイヤーの爆弾処理とほぼ同じです。
違いといえばプレイヤーの爆弾はキーの押下で投下、
こちらはランダムで発射しているところです。
変数 ed が 0 か 1 の時のみなのは、潜水艦として存在しているものだけにしています。

あと、爆弾を未使用にするタイミングは画面から出た時ではなく、海面から出たときです。
205 行目で判断しています。

 

それでは実行して、潜水艦が爆弾を発射するか確認しましょう。

 

潜水艦が爆弾を発射