关键事件后Javascript启动秒表

时间:2019-06-22 19:44:42

标签: javascript time keyevent

我正在使用canvas元素开发游戏。我们的目标是,第一次按下按键时,它将启动秒表。它应在gameoverscreen / winscreen出现后立即结束。

游戏结束屏幕/ winscreen之后,它应该像befor(如果按键而不是秒表)一样工作

问题在于仅调用一次的函数就可以。

代码(最重要的部分):

function startTime(){
    startTime = function(){};
    var count = 0;
    function stopwatch(){
        if(winScreen || gameOver){ 
            count = 0;
        } else{
            console.log(count++);
        }
    }
    setInterval(stopwatch, 1000);
}
document.addEventListener('keydown', function(event){
    startTime();
});

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

问题的原因是您在第二行用空函数覆盖了startTime。第二次调用startTime()时,它将运行空函数。

为保持代码整洁,秒表不应真正检查条件是否胜出,而应仅跟踪计数。只要出现这些情况,其余的游戏代码就可以启动和重置秒表。您可以有一个这样的秒表对象:

var stopwatch = {
  count: 0,
  
  intervalId: null,
  
  start: function() {
    stopwatch.intervalId = setInterval(function() {
      stopwatch.count++;
    }, 1000)
  },
  
  reset: function() {
    if (stopwatch.intervalId) {
      clearInterval(stopwatch.intervalId);
      stopwatch.intervalId = null;
    }
    stopwatch.count = 0;
  }
}

然后您的游戏可以在启动时调用stopwatch.start(),在结束时调用stopwatch.reset()。

请注意,它在重置时也会清除间隔。否则,setInterval内部的函数将每次都重复,从而导致潜在的错误和内存泄漏。