javascript

/

純粋なJavascriptでのブロック崩しの作り方⑨

純粋なJavascriptでのブロック崩しの作り方⑨ のサムネイル

やりたいこと

フレームワークやライブラリを使わず、純粋なjavascriptのみでブロック崩しを作る。

今回は第9回目となり、マウス操作を追加していきます。

前回はスコアとクリアメッセージを追加するところまでやりました↓

キーボード操作も良いですが、マウス操作も知っておくと今後に役立つかも知れません。

ではさっそくやっていきましょう!

環境

  • Google Chrome : Version: 130.0.6723.92
  • VSCode : Version : 1.90.2 (Universal)

マウス操作イベントを追加

マウス操作イベントを追加するには、下記のようなコードを他のイベントリスナーコードの近くに追加してみてください。


// マウス操作
document.addEventListener("mousemove", mouseMoveHandler);

キーボード処理の時同様に、addEventListenerを使い、mousemoveイベントでマウス操作を感知します。

マウス操作があったら、mouseMoveHandlerという関数を呼んであげてます。

マウス操作関数を追加

マウス操作でパドルの位置を更新するには、マウスの現在地でパドルの位置を変えてあげる必要があります。
下記のコードをkeyUpHandler()関数の下に追加してみてください。


// マウス操作の処理
function mouseMoveHandler(e) {
  const relativeX = e.clientX - canvas.offsetLeft;
  // パドルの範囲を画面内に限定する
  if (relativeX - paddleWidth / 2 > 0 && relativeX + paddleWidth / 2 < canvas.width) {
    paddleX = relativeX - paddleWidth / 2;
  } else if (relativeX - paddleWidth / 2 <= 0) {
    paddleX = 0; // 左端に固定
  } else if (relativeX + paddleWidth / 2 >= canvas.width) {
    paddleX = canvas.width - paddleWidth; // 右端に固定
  }
}

下記のようになったかと思います。

blockmovie16

e.clientXでブラウザの端からのマウスカーソルのX座標 が分かります。
canvas.offsetLeftでブラウザの端からのcanvasの座標が分かります。
これらを利用して、e.clientXからcanvas.offsetLeftを引いてあげることで、マウスカーソルの位置が相対的に分かるようにしてます。

次に、relativeX - paddleWidth / 2 > 0でマウスカーソルの位置からpaddleWidthの半分を引いたものが、0より大きかったらという条件があります。 paddleWidthを引いてあげているのは左の画面外に出ないようにです。

同様に、relativeX + paddleWidth / 2 < canvas.widthで、右端も画面外に出ないように条件を追加しています。

それらの条件が一致した時に、paddleX = relativeX - paddleWidth / 2;でパドルの位置を更新してあげています。
ここでもパドルの半分を引いてあげているのは、初期ではパドルの左端にマウスがついてくるようになるからです。

else ifで、左端と右端出た時にその場でマウスを固定するようにしています。

今回は以上です。お疲れ様でした!
次回は、とうとう最後の仕上げに取り掛かります。

参考

出典: Mozilla Contributors. “純粋なJavaScriptを使ったブロック崩しゲーム”. MDN Web Docs.

この内容は、Creative Commons Attribution-ShareAlike (CC-BY-SA) 2.5(またはそれ以上)のライセンスのもとで公開されています。

webアプリ 初心者向け 備忘録