我正在研究基于HTML5画布的游戏,并且在Safari(在Windows上)遇到了一些问题。
游戏在Firefox和Chrome中运行得很好,甚至是IE,但在Safari上一切都很慢。
主游戏循环是通过使用setInterval调用方法(更新)来触发的,时间为50ms(20Hz)。
我设置了一些控制台计时器来检查更新运行了多长时间,认为它可能超过50毫秒并导致问题,但通常只需要6到20毫秒,所以有足够的空间。
然后我尝试了一个简单的计数器来查看更新被击中的次数,并将其计时10秒。在那个时候它应该执行200次,但只执行大约60次!哎呀!难怪它的运行速度应该是它的1/3。
然后我清空了更新方法,只保留了控制台计数,然后再次运行它。这个时间在10秒内它应该运行大约200次。
还有其他人有这个问题吗?是否有某种解决方法,或者可能只是我做错了什么?
更新:
我有机会在Mac上的Safari上测试它并且运行得非常漂亮。在Windows版本的Safari上,似乎只是一个糟糕的setInterval实现。
我找到了这个有趣的演示,它显示了setInterval的滞后... http://www.goat1000.com/2011/03/23/how-accurate-is-window.setinterval.html
这是一个非常简单的例子,它具有非常基本的计算需求,但即使如此,在Windows Safari中显示延迟并不需要很长时间。你可以想象复杂的图形游戏会有多糟糕。