Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript requestAnimationFrame以超过60FPS的速度调用_Javascript_Html_Requestanimationframe_Game Loop - Fatal编程技术网

Javascript requestAnimationFrame以超过60FPS的速度调用

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上都试过,结果都一样。知道为什么会这样吗?我已经用了很多次同样的方法,这

我正在做一个简单的游戏,我遇到了一个问题,在最小化窗口几秒钟后,返回时,游戏以两倍的帧速运行,甚至更多,每次增加60。我的游戏循环如下所示:

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
不应在非活动选项卡上触发。