首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在HTML5画布中丢弃帧

如何在HTML5画布中丢弃帧
EN

Stack Overflow用户
提问于 2013-03-17 13:28:13
回答 2查看 914关注 0票数 1

我正在用HTML5做一个带有画布元素的小游戏。它在大多数计算机上运行良好,但在其他计算机上运行滞后。但是,它不会跳过帧,它会继续渲染每一帧,游戏会变慢。我正在尝试编写一个跳过帧的函数,但我想不出一个公式来实现它。

我试着到处找,但什么也没找到。

我有一个渲染游戏的函数,叫做render,它在一个循环中,如下所示:

代码语言:javascript
运行
复制
var renderTimer = setInterval("render(ctx)", 1000/CANVAS_FPS);

render()
{
/* render code here */
}

谢谢你的帮助,Brandon Pfeifer

EN

回答 2

Stack Overflow用户

发布于 2013-03-17 13:46:20

此模式将允许您跳过已知为慢的计算机上的帧

代码语言:javascript
运行
复制
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

}
票数 1
EN

Stack Overflow用户

发布于 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);就可以省去很多麻烦。只要你认为你的代码在画布上不应该变得起伏不定,即使在很多情况下也是如此。

祝好运

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15457829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档