单击按钮后清除超时



我目前正在尝试编写类似于tamagotchi"护理错误"的代码。

在这种情况下,我正在尝试创建一个函数来检查对象的饥饿统计数据是高于还是在 10。一旦发生这种情况,计时器将启动,如果它在 10 秒后保持在 10 以上,它将被记录为"错误"。

但是,如果用户执行其他操作将饥饿感降低到 10 以下,它将清除计时器。

尽管尝试了下面的代码,但我目前无法正确清除计时器。

var changeHungerMood = setInterval(mistakeCheck, 5000);
function mistakeCheck() {
var mistakeTimer
function addMistake() {
stats.mistakes += 1;
}
if (stats.hunger >= 10) {
var mistakeTimer = setTimeout(addMistake, 10000);
} else {
clearTimeout(mistakeTimer);
console.log("Mistake Cleared!");
}
}

minmaxHunger("hunger", 10, 0);

目前,即使检查后饥饿感低于 10,计时器也不会清除,它仍然被记录为错误。有人可以帮忙吗?谢谢。

您应该澄清在每种情况下需要完成的操作。 非常迫切地,您需要:

  1. 设置你的计时器,如果stats.hunger >= 10,你做得很好(除了你声明mistakeTimer两次var......跳过第二个var(。
  2. 当 10 秒结束时,您需要检查stats.hunger是否仍然10或更多,而不是调用addMistake,如果是这种情况,请调用您的addMistake函数。

因此,您需要添加一个函数addMistakeIfNeeded,用于执行检查并在需要时调用addMistake。您的计时器应该调用此addMistakeIfNeeded函数而不是addMistake

@Jonas是对的,您需要将addMistakeaddMistakeIfNeeded排除在mistakeCheck功能之外。

最新更新