Canvas Confettiを使ってゲームをつくる(1)の続きです。今回は前回定義したクラスをつかってゲームを完成させます。

ページが読み込まれたときの処理

ページが読み込まれたときの処理を示します。画像ファイルを読み込んでイメージを作成します。そのあと初期化の処理をおこないます。

showCtrlButtons関数は自機操作用のボタンの表示非表示を切り替えるためのものです。ボタン要素は配列ctrlButtonsに格納されています(前回の記事参照)。

イベントリスナを追加する処理を示します。

initInterval関数は更新処理を1秒間に30回、BGMをエンドレス再生できるようにします。このゲームのBGMにつかっている音源は1分47秒まで再生したら最初に巻き戻すと自然に聞こえるので、1秒おきにどこまで再生されているのかを調べています。

レンジスライダーでボリュームをコントロールできるようにする処理を示します。

[音量テスト]ボタンをクリックするとplaySound関数が呼び出され、設定したボリュームで効果音を再生します。

更新処理と当たり判定

更新処理を示します。新しい敵の生成は更新回数で決めるのでupdateCountをインクリメントしています。そのあと自機、敵、弾丸の更新処理をおこないます。

当たり判定の処理を示します。すでに死亡フラグがセットされているオブジェクトは処理の対象外です。

命中または被弾時の処理

自機の弾丸が敵に命中したときの処理を示します。この場合は紙吹雪を生成します。引数は紙吹雪が飛び出す部分の座標です。

自機が敵、敵弾に衝突したときの処理を示します。この場合は0.1秒間背景を赤に変更し、Lifeを1減らします。そのあと汚物を周辺にぶちまけます。絵文字が回転するとなにかわからないので半分は回転しない状態で周囲に放出させます。

また立て続けにLifeが減らないように、1秒間は無敵状態にします。Lifeを1減らした結果、Lifeが0以下になった場合はゲームオーバーの処理をおこないます。

ゲームオーバー時の処理

ゲームオーバー時の処理を示します。

自機の死亡フラグをセットします。これで自機は描画されなくなります。自機操作用のボタンを非表示にしてBGMを停止します。1.5秒後に’GAME OVER’の文字列を表示して効果音を鳴らし、ゲームスタート用のボタンを表示させます。またisPlayingフラグをfalseにします。これによって更新処理も停止します。

描画処理

描画のための処理を示します。

まず敵と弾丸オブジェクトのなかで死亡フラグがセットされたものは配列のなかから取り除きます。
canvas全体を背景色で塗りつぶし、各キャラクタを描画します。

敵弾発射と新しい敵を生成する処理

敵に弾丸を発射させる処理を示します。

1回の更新ごとにそれぞれの敵に0.01の確率で弾丸を発射させます。発射方向は自機がいる方向です。

新しい敵を生成する処理を示します。

64更新ごとに敵の編隊を追加します。どのタイプの敵にするかは乱数で決めます。

ゲーム開始時の処理

ゲーム開始時の処理を示します。

プレイ中であることを示すisPlayingをtrueにし、自機の状態を初期化するためにPlayer.Init関数を呼び出します。各オブジェクトが格納されている配列をクリアしてBGM再生などの処理をおこないます。