Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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 渲染和jaggering_Javascript - Fatal编程技术网

Javascript 渲染和jaggering

Javascript 渲染和jaggering,javascript,Javascript,我有一个使用2d上下文的HTML5画布。我可以每秒获得120帧,但是渲染可能是锯齿状的,动画只是跳跃。我想知道是什么导致了它,特别是在这样高(但毫无意义)的帧速率下?还有哪些已知的平滑动画的方法 我唯一想到的是,没有考虑到实际的图纸。因此,虽然更新和绘图功能可以快速运行,但画布上的绘画将在稍后进行堆叠。这就意味着我没有获得真正的每秒帧数。尽管如此,我可以获得120帧每秒,这实际上毫无意义。因为我使用的是setTimeout,所以我不能保证时间是恒定的,因此,当它执行jagger时,这是因为帧速率

我有一个使用2d上下文的HTML5画布。我可以每秒获得120帧,但是渲染可能是锯齿状的,动画只是跳跃。我想知道是什么导致了它,特别是在这样高(但毫无意义)的帧速率下?还有哪些已知的平滑动画的方法


我唯一想到的是,没有考虑到实际的图纸。因此,虽然更新和绘图功能可以快速运行,但画布上的绘画将在稍后进行堆叠。这就意味着我没有获得真正的每秒帧数。

尽管如此,我可以获得120帧每秒,这实际上毫无意义。因为我使用的是
setTimeout
,所以我不能保证时间是恒定的,因此,当它执行jagger时,这是因为帧速率暂时显著下降

然而,在工作中我找到了另一个选择。我有点惊讶这是多么难找到

https://developer.mozilla.org/en/DOM/window.mozRequestAnimationFrame

据我所知,该功能允许浏览器优化动画。理论上,这将提供更一致的帧速率,从而提供更平滑的动画

比较Chrome、Safari、Opera和Firefox的绘图方式也很有趣。我主要在Chrome14dev和Mozilla Aurora 6.0a上进行测试,它们的绘图方式看起来非常不同。Chrome似乎能够直接绘图。Firefox似乎在输送像素,好像在一个接一个地发送像素来绘制

这让我想到了歌剧

http://www.felinesoft.com/blog/index.php/2010/09/accelerated-game-programming-with-html5-and-canvas/

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

还有另一个实验特性也可能有所帮助


尽管如此,我可以每秒获得120帧,这实际上毫无意义。因为我使用的是
setTimeout
,所以我不能保证时间是恒定的,因此,当它执行jagger时,这是因为帧速率暂时显著下降

然而,在工作中我找到了另一个选择。我有点惊讶这是多么难找到

https://developer.mozilla.org/en/DOM/window.mozRequestAnimationFrame

据我所知,该功能允许浏览器优化动画。理论上,这将提供更一致的帧速率,从而提供更平滑的动画

比较Chrome、Safari、Opera和Firefox的绘图方式也很有趣。我主要在Chrome14dev和Mozilla Aurora 6.0a上进行测试,它们的绘图方式看起来非常不同。Chrome似乎能够直接绘图。Firefox似乎在输送像素,好像在一个接一个地发送像素来绘制

这让我想到了歌剧

http://www.felinesoft.com/blog/index.php/2010/09/accelerated-game-programming-with-html5-and-canvas/

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

还有另一个实验特性也可能有所帮助