Processing 入門
24.潜水艦5 爆弾と敵の当たり判定
今回は「潜水艦4 爆弾投下と複数キーの操作」の続きです。
当サイトでは、私自身がサンプルを作ったときの順番で説明しています。
ですから途中で仕組みを変更することもあります。(前回のキー入力のように)
いきなり結果だけを見せるより「プログラミングの進め方を理解してもらえるのでは」と思っています。
そんな訳で説明が少し長くなりやすいです。
爆弾と敵との当たり判定をしよう
爆弾を投下できるようになったので、敵との当たり判定を入れます。
敵1つに対し6個の爆弾すべてと当たりをチェックします。
もし当たっていたら、存在を判定している変数に未使用となる値を入れます。
これで画面上に表示されなくなります。
実行してみましょう。
爆弾と敵が接触したら、どちらも消えることを確認します。
これまでに何度か当たり判定を説明してきましたので
ここでは簡単にx座標の部分だけで説明します。
当たり判定は、絵の形ではなく四角い範囲で行います。
変数に加算している数値は敵の幅 76 と爆弾の幅 10 です。
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 にしました。
それから、敵の移動( 88 行目)に生存中か判断を入れます。
爆発中に移動させないためです。
準備ができたので爆発アニメを入れます。
変数 ed はフラグとして、生存中(0と1)、爆発中(2と3)、未使用(4)の
3つに分類して使うことになります。
爆発カウント ecnt で絵の切り替えをしています。
119 行目の計算で ed の値を 2 と 3 に切り替えています。
それぞれの変数がどのように変化しているのか分からないときは println を
使って確認してみると理解しやすくなると思います。
3フレームごとに切り替わっていることがわかりますね。
テストした後は println の行を削除しましょう。
消さないと今後の説明と行数が合わなくなります。
それでは実行してみましょう。
敵が爆弾と当たり、爆発アニメに切り替わるのを確認します。
敵の爆弾を表示しよう
次は敵が発射する爆弾を表示しましょう。
これまでの作業と同じ手順なので、表示と移動をいっしょに作ります。
まずは画像データの読み込みから、座標管理のための変数を用意するところまで作ります。
爆弾の数は最大で 20 個とします。
62 行目の関数 bombEnemyMove はこれから用意します。
これは爆弾の表示と移動をするためのものです。
発射するための関数 bombEnemyAdd も用意します。
プレイヤーの爆弾処理とほぼ同じです。
違いといえばプレイヤーの爆弾はキーの押下で投下しているのに対し、こちらはランダムで発射しているところです。
変数 ed で 0 か 1 を判断しているのは(131 行目)、潜水艦として存在中かどうかを調べています。
あと、爆弾を未使用にするタイミングは画面から出た時ではなく、海面から出たときです。
208 行目で判断しています。
それでは実行して、爆弾が発射されることを確認しましょう。