游戏结束后禁用鼠标交互失效求助:计时器判断方案无效
解决游戏结束后鼠标交互未禁用的问题
你当前的代码只在游戏启动时(startTime>0)绑定鼠标交互,但没有在游戏结束(startTime归零)时移除已绑定的事件监听,之前绑定的交互逻辑会一直生效,所以计时器归零后仍能操作。
解决方案
- 拆分鼠标交互逻辑,分别写绑定和解绑函数:
// 绑定鼠标交互 function setupMouseInteraction() { // 示例:绑定你的鼠标事件 canvas.addEventListener('click', onMouseClick); canvas.addEventListener('mousemove', onMouseMove); } // 解绑鼠标交互 function removeMouseInteraction() { // 对应移除事件监听,必须和绑定的函数完全一致 canvas.removeEventListener('click', onMouseClick); canvas.removeEventListener('mousemove', onMouseMove); }
- 增加状态判断,在游戏状态切换时调用对应函数:
let isMouseActive = false; // 标记当前鼠标交互是否激活 function checkGameState() { if (startTime > 0 && !isMouseActive) { setupMouseInteraction(); isMouseActive = true; } else if (startTime <= 0 && isMouseActive) { removeMouseInteraction(); isMouseActive = false; } }
原理说明
事件监听一旦绑定,除非主动调用removeEventListener移除,否则会一直存在于元素上。你之前的代码只做了“添加交互”的动作,没处理“移除交互”的步骤,所以游戏结束后鼠标操作不会自动失效。通过显式解绑事件,就能彻底禁用鼠标交互,直到下次重启游戏时重新绑定。
内容的提问来源于stack exchange,提问作者Tan Jun Rong
相关产品推荐
相关产品推荐

