在我们的 JavaScript 游戏中,我们遇到了一个问题,即“touchmove”事件缓慢且“不稳定”,直到方向发生变化,此时它们再次变得平滑。
当游戏执行大量工作(例如加载关卡)时,速度会再次出现。
这是一个视频,显示了缓慢的触摸动作,以及解决问题的方向变化。
日志中确实出现以下警告
由于主线程正忙,对“touchmove”输入事件的处理延迟了 141 毫秒。考虑将事件处理程序标记为“被动”以使页面更具响应性。
但是,在游戏停止执行繁重的工作(例如加载关卡和构建精灵)后,缓慢的事件仍然存在。
在任何情况下我都不能使用被动处理程序,因为平移地图必须 preventDefault 来停止界面滚动。
我假设缓慢与触摸事件有关,因为我已经测量了触摸处理程序被调用的频率并且它们看起来很奇怪。
将在约 20 毫秒内连续接收 5-10 个事件,然后会有一个大约 150-200 毫秒的事件,然后是另一批快速事件,以及另一批慢速事件。
方向改变后,所有事件都在 20ms 内收到
我还测量了我的 requestAnimationFrame 响应,它们似乎是相当稳定的 16.8 毫秒
对于那些有兴趣的人,您可以在https://blight.ironhelmet.com自己查看问题
这些问题出现在 Chrome 和 Cordova 中,无论是原生的还是使用 Crosswalk 的。在 iOS 上的 Safari 或任何经过测试的桌面浏览器上都不会出现这些问题。
我想知道其他人是否有这个问题以及我如何解决它。
是否可以使用 JavaScript 强制“方向更改”或在方向更改期间发生的任何事情?