我想知道在JavaScript中实现渲染器的最佳方法是什么。这不是渲染的内容部分,这在这里非常重要 - 我更愿意听到何时以及如何有效地运行渲染器代码。
目前,我有window.setInterval(renderFunc, 1000 / 20)
,每隔50毫秒就会渲染一帧(即fps = 20)。
重点是更快的计算机不会渲染更多的帧,而且速度较慢的计算机将无法赶上20 fps,因此调用的函数比计算机可能处理的更多。
我在考虑一个while(true)
循环,但这会使用100%的CPU并冻结计算机本身 - 所以实际上我的游戏(渲染器是我的3D游戏)将不再可玩了你不能再点击按钮了。
这种情况下最有效的选择是什么,还是有更好的方法没有出现在我的脑海中?
提前致谢。
答案 0 :(得分:3)
有一个专门为动画制作的功能,名为window.requestAnimationFrame
。这意味着浏览器选择何时调用动画函数而不是硬编码间隔。使用它带来了很多好处:
本文介绍如何以跨浏览器方式使用它: http://paulirish.com/2011/requestanimationframe-for-smart-animating/
答案 1 :(得分:1)
尝试在Web工作线程中尝试while(true)
循环。这应该可以防止浏览器锁定。请注意,您无法在工作线程中直接操作<canvas>
或DOM的任何其他部分。
答案 2 :(得分:1)
您可以计算帧渲染所需的时间,并调整帧间距以获得可接受的负载。例如,如果当前帧需要5ms渲染,并且您想要50%加载,请在下一帧之前等待5ms。你需要对它进行一些健全性检查,也可能使用最后几帧的时间。
答案 3 :(得分:1)
“setInterval()将传递回调被调用的毫秒数” - https://developer.mozilla.org/en/window.setInterval
您可以使用它来动态调整间隔时间。
N.B。 MDC文档适用于由Mozilla实现的Javascript,而不是ECMA脚本或其他实现。您应该检查这是否适用于其他浏览器。