首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >渲染和交错

渲染和交错
EN

Stack Overflow用户
提问于 2011-07-02 07:47:45
回答 1查看 115关注 0票数 1

我有一个使用2d上下文的html5画布。我能够达到每秒120帧,但渲染可能会参差不齐,动画只是跳跃。我想知道是什么导致了它,特别是在如此高(但毫无意义)的帧率下?什么是已知的方法或平滑动画以及?

我唯一想到的是,实际的绘图并没有被计算在内。因此,虽然更新和绘制功能可以快速运行,但画布上的绘画是稍后堆叠的。这意味着我得到的不是真正的每秒帧数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-03 19:33:48

虽然,我可以得到每秒120帧,这真的没有什么意义。因为我使用的是setTimeout,所以我不能保证时间是恒定的,因此,当它出现锯齿时,那是因为帧速率在一段时间内显著下降。

然而,在作品中有一个替代方案,我设法找到了。我有点惊讶,这是多么难找到。

http://paulirish.com/2011/requestanimationframe-for-smart-animating/ https://developer.mozilla.org/en/DOM/window.mozRequestAnimationFrame http://dev.chromium.org/developers/design-documents/requestanimationframe-implementation

据我所知,该函数允许浏览器针对动画进行优化。从理论上讲,这应该提供更一致的帧速率,这应该提供更平滑的动画。

比较Chrome、Safari、Opera和Firefox是如何绘制的也是非常有趣的。我主要在Chrome14dev和Mozilla Aurora 6.0a上测试,它们的绘制方式看起来非常不同。Chrome似乎能够直接绘图。火狐似乎在用管道传输像素,就像是把它们一个接一个地送去绘制一样。

这就把我引向了Opera

http://www.scribd.com/doc/58835981/122/Double-Buffering-with-Canvas http://www.felinesoft.com/blog/index.php/2010/09/accelerated-game-programming-with-html5-and-canvas/

事实证明,基于Webkit的浏览器和基于Gecko的浏览器在内部使用双缓冲区,即它将所有绘制函数收集在一起,然后在函数线程的返回上绘制它们。如果你有一个主循环函数,比如update,它不会绘制,直到它返回。Opera,只需在调用绘制函数时绘制它们,但实现双缓冲并不困难。这可能是另一种平滑动画的方法。

还有另一个实验功能可能也会有帮助。

http://badassjs.com/post/4064873160/webgl-2d-an-implementation-of-the-2d-canvas-context-in

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

https://stackoverflow.com/questions/6554208

复制
相关文章

相似问题

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