レーザーと爆発のエフェクトをつかってゲームをつくる(1) の続きです。今回は自機クラスと敵クラスを定義します。

Playerクラスの定義

自機の状態を更新し描画するためにPlayerクラスを定義します。

コンストラクタ

最初にコンストラクタだけ示します。

更新処理

更新時におこなわれる処理を示します。

キーが押下されていたら自機をその方向に移動させますが、canvasの外に出てしまう場合はcanvas内に収まるように移動させます。また時間の経過とともに自機を左右にゆらゆら回転させます。回転角が30度を超えたら反対方向を反転させます。

描画の処理

描画の処理を示します。

自機死亡の場合は描画しません。また無敵状態のときは点滅させます。UpdateCountを4で割ったときの剰余が2より小さいときは描画しません。

レーザーの発射

レーザーを発射する処理を示します。中心が(150, 150)になるようにキャラクタを描画したとき、レーザーの発射地点(x0, y0)とその通過点(x1, y1)はleftsとrightsのようになります。これを(150, 150)を中心にしてthis.Angleだけ回転させます。これでレーザーの発射地点がわかります。

またMath.atan2関数にy1 – y0 と x1 – x0 を渡せば回転していない状態の発射角度がわかります。回転している状態での発射角度であればMath.atan2関数が返した値にthis.Angleを加えることで求めることができます。

敵クラスの定義

敵の状態を更新して描画するために敵クラスを定義します。敵は2種類生成します。ブログ1000回更新記念企画で定義したEnemy0クラスとEnemy1クラスを少しだけ手直ししたものを使います。

EnemyBaseクラスの定義

EnemyBaseクラスはEnemy0クラスとEnemy1クラスの基底クラスです。

Enemy0クラスの定義

Enemy0クラスは上から急降下してきてそのあと上方に撤収するタイプの敵を動作させるためのものです。

Enemy1クラスの定義

Enemy1クラスはジグザグ移動するタイプの敵を動作させるためのものです。

EnemyBulletクラスの定義

敵の弾丸を更新して描画するためにEnemyBulletクラスを定義します。

コンストラクタに初期の中心座標と移動量を渡し、更新時に移動量だけ中心座標を移動させます。移動することでcanvasの外に出てしまった場合は死亡フラグをセットします。