我正在使用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();
});
有没有办法解决这个问题?
答案 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内部的函数将每次都重复,从而导致潜在的错误和内存泄漏。