【发布时间】:2021-07-08 20:09:54
【问题描述】:
我在开发一款游戏,我的目标是:当游戏结束时,用户可以通过单击鼠标重新开始游戏。
但是代码$(document).click(startFunction); 的行为类似于startFunction();。
我还注意到,如果$(document).click 被添加到“游戏结束”阶段之前的阶段,那么第一个$(document).click 直接调用下一个函数,第二个$(document).click 按预期工作。
我在这里错过了什么?提前致谢。
这是我的 JS 代码。它已被简化,只有与我的问题相关的“外壳”保持不变。
dislayedGameDescription();
function gameOver() {
$(document).off("click");
// more code...
$(document).click(moveByComputer);
}
function gameStart() {
$(document).off("click");
// more code...
moveByComputer();
}
function moveByComputer() {
$(document).off("click");
// more code...
$(".btn").click(moveByUser);
}
function moveByUser() {
$(".btn").off("click");
// more code...
determination();
}
function determination() {
if (1) {
if (2) {
moveByComputer();
} else {
$(".btn").click(moveByUser);
}
} else {
// I want to place here gameOver(); but it works only if I place
$(document).click(gameOver);
// And it acts like gameOver(); here so the next $(document).click in the gameOver function acts normal
}
}
function dislayedGameDescription() {
// more code...
$(document).on("click", gameStart);
}
【问题讨论】:
-
为什么要添加和删除点击处理程序。完全没有必要。分配事件侦听器一次,然后在单击执行任何操作时测试布尔值
-
这也总是正确的
if (1) { if (2) {,因为它们是真实的值 -
mplungjan,感谢您查看我的代码。我删除点击处理程序的原因如下:在我的游戏中有 4 个按钮和屏幕的其余部分。用户使用按钮控制游戏,但通过单击屏幕上的任意位置来启动和重新启动游戏。我的想法是仅在游戏结束时才允许在任何地方单击以重新启动它。如果我误解了您的评论,也许您可以发布并举例说明您的意思。关于 if 语句,数字代表条件,因为我有两个条件来评估用户的输入。我删除它们并用数字替换它们只是为了简化。
标签: javascript jquery events handler