gpt4 book ai didi

Javascript 在关键事件后启动秒表

转载 作者:行者123 更新时间:2023-12-02 23:26:19 24 4
gpt4 key购买 nike

我正在开发一款带有 Canvas 元素的游戏。目标是当您第一次按下某个键时,它会启动秒表。一旦出现gameoverscreen/winscreen,它就会结束。

在游戏结束/胜利屏幕之后,它应该像之前一样工作(如果按下按键而不是启动秒表)

问题是该函数只能调用一次。

代码(最重要的部分):

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();
});

有办法解决这个问题吗?

最佳答案

问题的原因是您在第二行用空函数覆盖了 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 中的函数每次都会重复,从而导致潜在的错误和内存泄漏。

关于Javascript 在关键事件后启动秒表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56718619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com