我正在开发一个基于 HTML5 画布的游戏,并且在 Safari(在 Windows 上)中遇到了一些问题。
该游戏在 Firefox 和 Chrome,甚至 IE 中运行良好,但在 Safari 上,一切运行缓慢。
主游戏循环通过使用 setInterval 调用方法(更新)触发,时间为 50 毫秒(20 赫兹)。
我设置了一些控制台计时器来检查更新运行需要多长时间,我认为它可能超过了 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 中显示出来。你可以想象对于一个复杂的图形游戏来说它是多么糟糕。