今回は「潜水艦4 爆弾投下と複数キーの操作」の続きです。
当サイトでは、私自身がサンプルを作ったときの順番で説明しています。
ですから途中で仕組みを変更することもあります。(前回のキー入力のように)
この方がプログラミングの仕方、考え方を理解してもらえるのではないか
と思っているからです。
そんな訳で説明が少し長くなりやすいです。
爆弾を投下できるようになったので、敵との当たり判定を入れます。
敵1つに対し6個の爆弾すべてと当たりをチェックします。
もし当たっていたら、存在を判定している変数に未使用となる値を入れます。
これで画面上に表示されなくなります。
実行してみましょう。
爆弾と敵が接触したら、どちらも消えるか確認します。
今までに何度か当たり判定の仕組みを説明してきましたので
ここでは簡単に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 行目で判断しています。
それでは実行して、潜水艦が爆弾を発射するか確認しましょう。