明确可见性改变时的行为
对于考验反应的游戏,当 document.visibilityState 变为 hidden 时暂停对局、冻结倒计时并清除按住的按键状态;页面再次可见时显示继续按钮。回合制谜题可以不显示暂停画面而保持棋盘不变,同时静音并重置动画时钟。
在实施之前写下计时器、移动危险和按下的按键的预期行为。然后在每种情况下切换离开并返回。这个小矩阵可以捕获错误,例如在游戏不可见时按键保持逻辑保持或计时器到期。
恢复游戏前重置计时
监听 visibilitychange 事件,并将暂停决策与绘制分开。返回时,把上一帧时间戳设为当前动画时间戳,或者标记恢复后的第一帧要重置时钟。否则,下一次增量可能包含整个隐藏时段,导致物体突然移动。
使用页面可见性 API,而不是仅依赖于模糊和焦点:窗口可能会在保持可见的情况下失去焦点,而可见性可表明文档是否实际上是隐藏的。保持任何自动保存策略的独立性;暂停行为和持久性有不同的目的,应该单独测试。
关于暂停浏览器游戏背景选项卡的常见问题
requestAnimationFrame 会继续在隐藏选项卡中运行吗?
大多数浏览器会在后台选项卡或隐藏的 iframe 中暂停动画回调,并且计时器回调也可能受到限制。将这些行为视为处理可见性的原因,而不是作为精确的时钟。
每个游戏在隐藏时都应该暂停吗?
没有单一的政策适合所有的设计。当看不见的模拟改变挑战时暂停游戏;对于回合制游戏,保留当前棋盘就足够了。无论哪种情况,返回时都要故意重置计时和音频。
延伸阅读
发现信息过时了? 报告需要更正的内容