前回 ASP.NET Core版 戦車対戦ゲームをつくる(3)の続きです。

cshtmlファイル

最初にgame.cshtmlファイルの内容を示します。ファイルの場所ですが、(ウェブアプリのurl)/Tank/gameにしたいのでPages\Tankフォルダ内にgame.cshtmlという名前でファイルを作成します。

またPages\Shared\_Layout_none.cshtmlの内容はクライアントサイドの処理 ASP.NET Coreでクラッシュローラーをつくる(3)を参照してください。

Pages\Tank\game.cshtml

JavaScript部分

次にJavaScript部分ですが、最初にグローバル変数と定数部分を示します。

wwwroot\tank\app.js

次に壁と爆発の火花のようなものは表示と非表示を繰り替えすのでクラスを定義して管理します。

Wallクラス

Wallクラスを定義します。

this.Objectに格納するのはnew THREE.Mesh()で生成された3Dオブジェクトです。破壊されたオブジェクトはsceneから除去してしまって問題ないのですが、一時的に非表示にしたい場合はY座標を負の値にして地面の下に移動させて見えなくします。見えるようにするときはもとのY座標に移動させています。

Explosionクラス

Explosionクラスを定義します。

火花のようなものを正方形のオレンジ色の板で表現します。爆発が発生したら15個の板を生成してランダムな方向に飛ばします。そして24回(約1秒)移動させたらsceneからremoveします。

戦車と壁、砲弾を描画するためのジオメトリとマテリアル

次に戦車と壁、砲弾を描画するためのジオメトリとマテリアルを生成する処理を示します。壁はレンガを積んで作られているようにみえるように適当な画像ファイルを事前に作成しておき、読み込めるようにしておきます。

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

ページが読み込まれたときの処理を示します。

戦車を生成する

戦車を生成する関数を示します。自機と敵の戦車は形は同じ、色だけ変えます。

自機と敵の戦車、砲弾を生成する関数を示します。いずれも一度しか呼び出されない関数です。一度3Dオブジェクトをつくったらこれを使い回します。

壁を生成する

sceneに壁を追加する関数を示します。これも一度しか呼び出されない関数です。戦車と砲弾同様、一度3Dオブジェクトをつくったら同じものを使い回します。また3DオブジェクトはWallクラス内に格納して表示、非表示の切り替えができるようにしておきます。

以下は引数で指定された座標にある壁を表示させる関数です。

以下はhideXs配列とhideZs配列に格納されている座標の壁を非表示にする関数です。

地面を生成

以下は地面をsceneに追加する関数です。戦車のY座標を0にしているので地面のY座標は戦車の高さの半分だけ下に設定します。

更新処理

描画されているものを更新するための関数を示します。ゲームオーバー以降は更新の必要がないのでなにもしません。またゲームが開始される前も更新処理は必要ないので最初の条件式でreturnしています。