描画1

定数


機関銃から発射される弾丸を描画するために次の定数を定義しました。

弾丸の描画だけでもこのように多くの情報が必要です。

変数定義

スペースキーが押されている間に連続して発射します。そのためキーが押されているかのフラグを用意します。

そして弾丸を管理するための二次元配列を定義します。まず搭載できる弾丸数の一次元配列を定義します。

次に定義した一次元配列に弾丸情報の一次元配列を格納します。これで二次元配列になります。(二次元配列の初期化については初期値が無い二次元配列が参考になります)

スペースキーが押された時

スペースキーが押された時にフラグをON(true)にします。


スぺスキーの判定を「e.keyCode==32」としています。本来は他キーと同様に「e.key == “Space”」としたいのですが、キー値が取得できませんでした。そのため「e.keyCode」を利用しコードで判定しています。(その他コードは「MDN web docs」をご覧ください)

弾丸描画

弾丸の描画は描画処理(draw())から弾丸描画処理(bulletMove())を呼び出します。

6行目~8行目でスペースキーが押されているなら後述する発射処理(shot())を呼び出しています。

10行目~20行目では全弾丸の中から「発射中」を探し描画しています。そして描画後に弾丸を進めています。ここで弾丸が画面上に達したなら状態を「弾丸無し」にしています(16行~18行)

発射処理

発射処理は全弾丸の中から「未発射」を検索し「発射中」にしています。その際に弾丸の座標を設定しています。

弾丸の座標は発射処理呼び出し時に引数で設定しています。

戦闘機の機首に機関銃があるので、真ん中から弾丸が発射されないといけません。X、Y座標の計算式が複雑なので下記に図示します。

スペースキーが離されたら

スペースキーが離されたら発射を止めます。そのためフラグをOFF(false)にします。その処理が10行目~12行目です。

実行

実行し動作を確認します。
実行画面へ

スペースキーを押し続けると弾丸がつながって見えます。描画処理が呼び出される度に発射されるので、このように見えてしまいます。リアル感が無いので次回は発射間隔を設けます。

タイトルとURLをコピーしました