我正在用HTML5做一个带有画布元素的小游戏。它在大多数计算机上运行良好,但在其他计算机上运行滞后。但是,它不会跳过帧,它会继续渲染每一帧,游戏会变慢。我正在尝试编写一个跳过帧的函数,但我想不出一个公式来实现它。
我试着到处找,但什么也没找到。
我有一个渲染游戏的函数,叫做render,它在一个循环中,如下所示:
var renderTimer = setInterval("render(ctx)", 1000/CANVAS_FPS);
render()
{
/* render code here */
}
谢谢你的帮助,Brandon Pfeifer
发布于 2013-03-17 13:46:20
此模式将允许您跳过已知为慢的计算机上的帧
var isSlowComputer=true;
var FrameSkipper=5;
function render(){
// if this is a slow computer
// just draw every 5th frame
if(isSlowComputer && --FrameSkipper>0){ return; }
// reset the frame skipper
FrameSkipper=5;
// draw your frame now
}
发布于 2013-03-17 15:18:16
如果您的目标市场是使用支持HTML5的浏览器的用户,那么您可以只使用window.requestAnimationFrame。这允许所有的渲染逻辑被绑定到一个简单的地方,只有在必要的时候它才会变慢。它将努力达到每帧16ms的分配,这会让你达到60fps。
var canvas = document.getElementById("#canvas"); (function drawFrame(){ window.requestAnimationFrame(drawFrame, canvas); // your main code would fire off here }());
,只要你让浏览器计算出你的帧率,你就是黄金。
我之前写过一些使用画布的不同体验,在我使用requestAnimationFrame之前,事情有点起伏不定。
另一件需要牢记的事情是双缓冲。如果你要在任何时刻把很多东西写到屏幕上,我发现把它们都写到第二个隐藏的画布元素要容易得多,而只需要使用context.drawImg(buffer,0,0);
就可以省去很多麻烦。只要你认为你的代码在画布上不应该变得起伏不定,即使在很多情况下也是如此。
祝好运
https://stackoverflow.com/questions/15457829
复制相似问题