我理解setTimeout和setInterval之间的区别,因为this很好地解释了它。
这个问题是关于使用计时器的最佳实践,特别是setTimeout vs setInterval。
如果我需要在游戏中频繁地多次调用倒计时(例如,玩家移动到新位置,这会触发新的倒计时,这将鼓励他们在 5秒内移动 ),但它不一定是统一的间隔(意思是,它们应该移动到下一个位置,但可以在当前位置挂出并受到惩罚),是否在性能方面更好,并且代码清洁:
a)在玩家决定更改位置时继续清除并设置setTimeout()
if (player.newLocation !== player.oldLocation) { //player location has changed
window.clearTimeout(myTimer);
myTimer = setTimeout(function() {
do something
},50);
}
b)保持setInterval运行,但每次玩家移动到新位置时更改一个充当倒计时的变量
var counter = 0;
if (player.newLocation !== player.oldLocation) {
counter = 100;
}
myTimer = setInterval(function() {
if (counter > 0) {
// do something...
counter--;
}
},50);
答案 0 :(得分:2)
性能更好吗
如果不需要定时器,那么它们肯定会更好。无论他们是使用setTimeout
还是setInterval
实现的。
并清理代码
这取决于(通常)“玩家决定更改位置”的方式,以及如何向您的代码发出信号。它可能会在行为上产生实际差异,您的目标应该是保持代码正确 - 独立于输入的顺序和时间。保持简单,并选择您需要的。
答案 1 :(得分:0)
我认为除非你关注性能,否则做任何一个都可能没问题。也就是说,倒计时完成后你正在做一些处理器密集的事情。在那种情况下,我会说这取决于球员移动的频率。如果他们是抽搐(移动很多),那么继续使用setInterval。如果他们只是偶尔移动那么setTimeout可能会更好。