我正在尝试创建一个以精确间隔开始的函数来保持stanble更新速率。问题是它似乎在2个通道中执行。这是日志:
timeElapsed=141; lastDraw=1314040922291
timeElapsed=860; lastDraw=1314040923151
timeElapsed=141; lastDraw=1314040923292
timeElapsed=860; lastDraw=1314040924152
timeElapsed=141; lastDraw=1314040924293
timeElapsed=860; lastDraw=1314040925153
timeElapsed=141; lastDraw=1314040925294
timeElapsed=860; lastDraw=1314040926154
timeElapsed=141; lastDraw=1314040926295
timeElapsed=859; lastDraw=1314040927154
timeElapsed=143; lastDraw=1314040927297
timeElapsed=858; lastDraw=1314040928155
timeElapsed=143; lastDraw=1314040928298
timeElapsed=858; lastDraw=1314040929156
timeElapsed=142; lastDraw=1314040929298
首先,我使用
执行我的功能drawTimer = setTimeout(function(){ draw() }, 1);
,功能如下:
var draw = function(){
if(!running)
return;
var miliseconds = getCurrentMiliseconds();
var timeElapsed = miliseconds - lastDraw;
lastDraw = miliseconds;
console.log("timeElapsed=" + timeElapsed + "; lastDraw=" + lastDraw);
onDrawListener(timeElapsed);
if(timeElapsed < timeLapse)
miliseconds = timeLapse - timeElapsed;
else
miliseconds = 1;
drawTimer = setTimeout(function(){ draw() }, miliseconds);
}
它发生在Chrome和Firefox中。你知道它是由什么造成的吗?并且......如何解决它?
P.S。由于每个人似乎都对运行变量感到困惑,因此它是:它是一个私有父对象成员,指示该机制是否仍在运行或已停止。它由其他函数设置,只是为了确保在调用stop()后该函数不能继续工作。
- 更新 - timeLapse设置为1000(每秒1次),永远不会再次更改。
onDrawListener设置为此函数:
function(timeElapsed){
canvas.clear();
moveSnake();
if(snake.body[0] == food){
food = getRandomFreePosition();
++snake.body.lenght;
}
drawBackground();
drawFood();
drawSnake();
}
解释一下:canvas是一种负责回调,关键聆听以及一些功能的引擎。除此之外似乎有点自我解释。除了一些int算法和在画布上绘图之外,它们什么都不做。
- 想出来 - 我明白我应该计算当前功能花费的时间,而不是自上一次开始以来。我的旧方法不是在2个频道中工作,而是在长短 - 长 - 短 - 长 - 延迟
答案 0 :(得分:2)
首先你没有设置运行bool,当你输入函数时,立即在drawTimer上的clearTimeout上做一个。
clearTimeout(drawTimer);
答案 1 :(得分:0)
在这样的循环中,你应该考虑写:
if(timeElapsed >= AMOUNT_OF_TIME)
{
// run code
}