JavaScriptでレーザービームのようなエフェクトを作ります。レーザービームをただの直線ではなく周囲をボンヤリと明るくさせます。

前回、JavaScriptでレーザービームのようなエフェクトを作りましたが、描画の回数が多くなると処理に時間がかかるという問題がありました。

描画回数を大きな値にして発射ボタンを連打すると極端に処理速度が遅くなります。

今回は同じレーザービームを何度も生成するのではなく、一度生成されたものを再利用することで処理にかかる時間を短縮します。またレーザービームの太さやshadowBlurの値、描画回数を変更することでどのような描画がおこなわれるのかをシミュレーションできるようなものをつくります。

これだと描画回数を大きな値にして発射ボタンを連打しても処理速度はそんなに遅くはなりません。

HTML部分

まずHTML部分を示します。

style.css

グローバル変数と定数

グローバル変数と定数を示します。

index.js

Laserクラスの定義

レーザーを移動し描画するためにLaserクラスを定義します。

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

ページが読み込まれたときにおこなわれる処理を示します。

レンジスライダーに初期値をセットするとともに、これを操作したら設定されている値を変更できるようにします。そのあと更新処理を開始します。

レンジスライダーに関する初期化をする処理を示します。

発射時の処理

発射ボタンがクリックされたときの処理を示します。

Laserオブジェクトを生成して配列に格納します。発射地点はcanvasの中心です。発射角度はグローバル変数 playerAngleからわかります。発射時には効果音も鳴らします。

更新処理と描画処理

更新処理と描画処理を示します。

canvasの中央にプレイヤーを描画する処理を示します。