Oneshot Gems
立即玩

游戏开发者指南

将隐藏选项卡视为游戏状态

浏览器游戏运行时,玩家可能会切换标签页、最小化窗口或锁定设备。浏览器通常会暂停隐藏文档中的动画回调,并降低计时器的触发频率,因此更新循环不能假定每个预定的时钟回调都会到达。应将页面可见性建模为明确的状态转换。这样就能预先规定计时器、输入、声音和已保存进度的处理方式,而不必在玩家回来时猜测中间经过了多少模拟时间。

本页内容

明确可见性改变时的行为

对于考验反应的游戏,当 document.visibilityState 变为 hidden 时暂停对局、冻结倒计时并清除按住的按键状态;页面再次可见时显示继续按钮。回合制谜题可以不显示暂停画面而保持棋盘不变,同时静音并重置动画时钟。

在实施之前写下计时器、移动危险和按下的按键的预期行为。然后在每种情况下切换离开并返回。这个小矩阵可以捕获错误,例如在游戏不可见时按键保持逻辑保持或计时器到期。

恢复游戏前重置计时

监听 visibilitychange 事件,并将暂停决策与绘制分开。返回时,把上一帧时间戳设为当前动画时间戳,或者标记恢复后的第一帧要重置时钟。否则,下一次增量可能包含整个隐藏时段,导致物体突然移动。

使用页面可见性 API,而不是仅依赖于模糊和焦点:窗口可能会在保持可见的情况下失去焦点,而可见性可表明文档是否实际上是隐藏的。保持任何自动保存策略的独立性;暂停行为和持久性有不同的目的,应该单独测试。

关于⁨暂停浏览器游戏背景选项卡⁩的常见问题

requestAnimationFrame 会继续在隐藏选项卡中运行吗?

大多数浏览器会在后台选项卡或隐藏的 iframe 中暂停动画回调,并且计时器回调也可能受到限制。将这些行为视为处理可见性的原因,而不是作为精确的时钟。

每个游戏在隐藏时都应该暂停吗?

没有单一的政策适合所有的设计。当看不见的模拟改变挑战时暂停游戏;对于回合制游戏,保留当前棋盘就足够了。无论哪种情况,返回时都要故意重置计时和音频。

延伸阅读

发现信息过时了? 报告需要更正的内容

继续玩下去。

免费浏览器游戏,随时等你开玩。发现喜欢的游戏,让它成为你的下一个最爱。

跟随好奇心探索