鼠标控制
这是 Gamedev Canvas 教程 10 个步骤中的第 9 步。完成本课程后,你可以在 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 坐标大于 0 且小于画布宽度,就说明指针位于画布边界内。此时,将 paddleX(球板左边缘的坐标)设为 relativeX 减去球板宽度的一半,这样移动就会相对于球板中心进行。
现在球板会跟随鼠标指针。不过,由于我们将球板的移动限制在画布大小范围内,它不会从任意一侧完全消失。
比较你的代码
这是可进行比较的最新代码状态:
备注:试着调整球板移动的边界,使球板在画布两侧都能完整显示,而不是只显示一半。
下一步
现在我们已经拥有一个完整的游戏。接下来,我们会通过一些小调整来结束这一系列课程——收尾工作。