滑鼠控制

這是 Gamedev Canvas 教程第 9 步,共 10 步。您可以在 Gamedev-Canvas-workshop/lesson9.html 找到完成本課程後應有的原始碼。

遊戲本身已經完成了,所以讓我們來完善它。我們已經添加了鍵盤控制,但我們也可以輕鬆地新增滑鼠控制。

監聽滑鼠移動

監聽滑鼠移動比監聽按鍵更容易:我們只需要監聽 mousemove 事件。將以下這行程式碼新增到與其他事件監聽器相同的位置,就在 keyup 事件 的下方。

js
document.addEventListener("mousemove", mouseMoveHandler);

將擋板的移動與滑鼠移動關聯起來

我們可以根據指標座標更新擋板的位置 — 以下處理函式將完全實現這一點。將以下函式新增到您的程式碼中,緊隨您剛剛新增的上一行程式碼之後。

js
function mouseMoveHandler(e) {
  const relativeX = e.clientX - canvas.offsetLeft;
  if (relativeX > 0 && relativeX < canvas.width) {
    paddleX = relativeX - paddleWidth / 2;
  }
}

在此函式中,我們首先計算一個 relativeX 值,它等於視口中的滑鼠水平位置 (e.clientX) 減去畫布左邊緣與視口左邊緣之間的距離 (canvas.offsetLeft) — 實際上,這等於畫布左邊緣與滑鼠指標之間的距離。如果相對 X 指標位置大於零且小於畫布寬度,則表示指標在畫布邊界內,然後 paddleX 位置(以擋板左邊緣為錨點)被設定為 relativeX 值減去擋板寬度的一半,這樣移動將實際相對於擋板的中心。

現在擋板將跟隨滑鼠游標的位置,但由於我們將移動限制在畫布的大小範圍內,所以它不會完全消失在兩側。

Compare your code

這是程式碼的最新狀態,供您對照。

注意: 嘗試調整擋板移動的邊界,以便整個擋板在畫布的兩側都可見,而不僅僅是一半。

後續步驟

現在我們有了一個完整的遊戲,我們將用一些小的調整來結束我們的課程系列 — 收尾工作