Processing 入門
25.潜水艦6 水柱とゲームオーバー
今回は「潜水艦5 爆弾と敵の当たり判定」の続きです。
プログラミングを初めて覚えるとき、説明されていることを信じて
勉強を進めるわけですが、余裕がでてきたらちょっと疑ってみましょう。
「本当にこの方法でいいのかな」
「もっと良い方法があるんじゃないかな」
というような感じで。
プログラムの書き方は1つではありません。
説明されている方法が一番良いとは限らないのです。
水柱を表示しよう
敵の爆弾が海面で爆発するようすを、四角い絵を使って表現してみましょう。
爆発による水柱ってやつです。
ただ、海上の空を水色にしているので、この四角は赤くします。
プログラムを次のように変更してください。
if 文の中に if があったり、カッコが多いので注意してください。
これまで爆弾が海面に出たら未使用にしていました。(画面外へ出していた)
それを水柱表示の準備に変更します。(208行から211行目まで)
実際には、水柱の表示は 215 行目で行っています。
変数 bEy == 60 のとき水柱の表示、それ以外は爆弾の表示(221行目)
にしています。
実行してみましょう。
爆弾が海面まで上がり、水柱が表示されるか確認します。
赤くしたため火柱のようですね。
水柱に当たり判定を入れよう
プレイヤーと水柱に当たり判定を入れましょう。
とてもシンプルなので、当たったらゲームオーバーを表示するところまで作りました。
ゲームオーバー用の関数には、表示系の関数のみ入れます。
ただ、敵の爆弾が水中で止まったまま表示されたり、いきなり消えるのは不自然なので bombEnemyMove も入れることにします。
当たり判定は 228 行目で行ってます。
x座標のみ判定しているのは、表示上y座標が同じになっているので判定の必要がないからです。
当たっていたら変数 gseq に2を代入し、ゲームオーバーの処理へ移行します。
その仕組みは draw 関数ですでに作ってあります。
実行してみます。
プレイヤーと水柱が当たって GAME OVER が表示されれば OK です。
沈む演出を入れよう
プレイヤーが水柱と当たったとき、海の中に沈む演出を入れます。
y座標を調整するための変数 pSink と
タイミングをコントロールするための変数 mcnt を用意します。
71 行目、y軸に pSink を追加するとき半分にしています。
これはゆっくり沈めるためです。
ついでにゲームオーバーの表示タイミングを変えました。(78 行目)
プレイヤーがやられた瞬間ではなく、沈み始めたタイミングで表示します。
実行してプレイヤーが沈むことを確認しましょう。
沈む演出が入りました。しかし、なんか変ですね。
ここはプレイヤーと海の表示優先を変えてみましょう。
表示優先は、後から描いた方が高くなります。
プレイヤー表示を先に、背景表示を後にします。
実行してみましょう。
プレイヤーが沈むと船体は見えなくなります。
沈んでいる感じが出てきましたね。