鼠标控制

这是 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

这是代码的最新状态,供您对照。

注意: 尝试调整挡板移动的边界,以便整个挡板在画布的两侧都可见,而不仅仅是一半。

后续步骤

现在我们有了一个完整的游戏,我们将用一些小的调整来结束我们的课程系列 — 收尾工作