我的最近游戏引擎GameMaker中遇到的一个困扰问题是在制作MOBA的时候出现了一个让人费解的BUG。如果你了解到玩家反馈移动鼠标导致游戏帧率大幅度跌下,是由这个原因造成的。
症状
快速移动鼠标而不进行点击操作,导致游戏帧率下降至几乎是 0。随鼠标停止移动,游戏即时恢复至最高速度。
谜惑
- HTML5/GXExport:工作正常。
- WindowsRunner:Bug。
- 基于引擎的代码库:将游戏简化到最基本的场景,没有任何游戏对象和对象的逻辑,而仍然有明显的延迟。从而剔除了原码和鼠标位置的延迟或影响。
原来原因:原始设备交互获取
我的新鼠标的采样率为 8000Hz。这意味着每秒有8000个原始设备交互事件。
- 引擎:使用Win32中的注册原始设备(
RegisterRawInputDevices)进行输入。 - 瓶颈: 在8000Hz采样量下,会对游戏循环进行同步处理,导致游戏循环无从接触。
- 工作原理:HTML5在浏览器环境下自动进行事件抖动(
throttle)处理,限制到动画帧速率(一般约为60Hz,非本机鼠标设备)。
最终解决方案
降低采样率至 2000Hz 或下降至 2000 Hz 可以立即解决这个问题。但是作为开发者来说不能要求每个玩家降低他们的硬件设置。
- 技术-fix: 在GMStudio中暂无直接的解决方案。
与其它问题相关的信息:
因为像Razer、Lamzu和Pulsar这样的鼠标品牌率先采用4k和8k采样率,这会导致这一个问题影响玩家中日渐高涨。如果你的游戏某些玩家体验出现卡顿或者抖动的情况,那么去检查他们的鼠标设置。
评论 (0)