Javascript requestAnimationFrame以超过60FPS的速度调用
我正在做一个简单的游戏,我遇到了一个问题,在最小化窗口几秒钟后,返回时,游戏以两倍的帧速运行,甚至更多,每次增加60。我的游戏循环如下所示:Javascript requestAnimationFrame以超过60FPS的速度调用,javascript,html,requestanimationframe,game-loop,Javascript,Html,Requestanimationframe,Game Loop,我正在做一个简单的游戏,我遇到了一个问题,在最小化窗口几秒钟后,返回时,游戏以两倍的帧速运行,甚至更多,每次增加60。我的游戏循环如下所示: function disp(){ update(); draw(); requestAnimationFrame(disp); } requestAnimationFrame(disp); 更新和绘制时不包括requestAnimationFrame。我在firefox和chrome上都试过,结果都一样。知道为什么会这样吗?我已经用了很多次同样的方法,这
function disp(){
update();
draw();
requestAnimationFrame(disp);
}
requestAnimationFrame(disp);
更新和绘制时不包括requestAnimationFrame。我在firefox和chrome上都试过,结果都一样。知道为什么会这样吗?我已经用了很多次同样的方法,这是第一次发生这种情况
编辑:你可以在
这真的很简单,因为这有点暂停我的进展。点击几次,享受10000多FPS的游戏体验在cocco的帮助下解决了这个问题。基本上,
onclick
事件在每次单击画布时调用disp
函数。因为disp
函数中有一个requestAnimationFrame
frame,所以它每秒调用两次,导致大量的帧涌入。为了解决这个问题,我只是在
canvas.addEventListener
function mouse_up() {
var matches = 0;
var overlap = 69;
mouse.up = false;
console.log("clicked", mouse.x,mouse.y);
disp();
}
您可以在此处找到结果:您是否可以在或(或公共可访问的链接)上生成简化的测试用例?是否有示例演示此问题?尝试使用全局var animation=requestAnimationFrame(disp)。。循环中的动画=requestAnimationFrame(disp)。这应该确保您只执行一次。添加了它。我查看了我的旧游戏,它根本没有这个问题。你应该只在
requestAnimationFrame
中使用draw
。更新应该在setTimeout
中,并以某种方式处理变化的增量。现代浏览器倾向于限制setTimeout
在非活动选项卡上触发的速率requestAnimationFrame
不应在非活动选项卡上触发。