【问题标题】:Javascript - Stop all functions from executingJavascript - 停止执行所有函数
【发布时间】:2020-04-17 00:23:59
【问题描述】:

我是一名编程初学者,刚刚用 HTML、CSS 和原生 JavaScript 编写了我的第一款游戏。它工作正常,但现在我在尝试实现重启功能时遇到了问题。 我发现了类似的问题并尝试了很多但找不到解决此问题的方法: 我将整个游戏包装在一个函数中,并在一个按钮上添加了一个事件监听器来开始游戏:

game() { /*game code*/ }
gameButton.addEventListener("click", game);

在代码中,我得到了多个函数和事件监听器。有三种方式“死亡”并获得游戏结束消息。这是游戏按钮重新出现的时候。但是,当您单击它时,game() 函数仍在运行,并且游戏无法正常运行,它应该不再运行了。我试图弄清楚如何停止整个游戏功能,以防这些事件之一发生但没有成功。

因此,例如:如果您点击了错误的位置,则会触发一个失败的功能,您的分数将减 1。如果您的分数低于 1,您将死亡,游戏结束:

function failed() {

    let x = parseInt(score.innerText) - 1;
    score.innerText = x.toString();
    if (x < 1) {
      gameOverText.style.display = "block";
    }

我怎样才能从这里停止 game() 函数?

非常感谢您!

【问题讨论】:

  • 这取决于game() 函数在做什么。您可以使用clearTimeout()clearInterval() 来停止计时器。

标签: javascript


【解决方案1】:

这真的取决于实际的代码和设计。但最简单的方法是布尔值。并在您的方法中检查以确保它仍在运行

var isActive = true
function failed() {
  if (!isActive) return
  ...

所以当游戏结束时,你将 isActive 设置为 false

【讨论】:

  • 阻止函数被调用会更有效,但这种方法是万无一失的。
  • @D.Pardal 有更好的解决方案,但如果没有看到所有代码,就不可能给出其中的一些。 ;)
  • 非常感谢你们!它完美地工作并解决了问题!非常感谢您的快速帮助!
【解决方案2】:

您是否尝试根据事件输出附加/删除侦听器。或者您可以检查状况并提前返回

伪代码:

const game = () => {
    // Do something here

    if(isDisabled) {
        return 
    }

    // OR

    if(something_to_stop) {
        detachListeners()
    }
}
function attachListeners() {
    gameButton.addEventListener("click", game);
}
function detachListeners() {
    gameButton.removeListener("click", game);
}

【讨论】:

  • 非常感谢您的帮助!使用在我的所有方法中检查的游戏超过布尔值就可以了。它在 game-over-function 中设置为 true,这也会删除所有活动的侦听器并清除间隔和超时。
猜你喜欢
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多