关于 manage-game-state
面向游戏开发的技能指南,强调用显式状态机管理游戏循环、输入、暂停与重置,并通过真实输入验证完整生命周期。
主要功能
- 01显式状态与完整转换
- 02按活动状态推进模拟
- 03处理指针锁定与失焦暂停
- 04重置所有游戏系统
- 05用状态快照验证循环
适用场景
- 01设计游戏状态与转换
- 02实现暂停和恢复行为
- 03确保重置恢复初始状态
- 04测试游戏结束后重新开始
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ playcanvas/ skills --skill manage-game-state安装后在 Claude Code 中输入/manage-game-state确认已加载。
详细介绍
游戏状态与循环
将游戏建模为一个小的、显式的状态机,并让时钟只有一个所有者。每次状态转换都要明确写出其状态;行为、输入和界面都读取当前状态,而不是依赖散落各处的布尔值。
状态与转换
- 枚举所有状态 —— 例如 ready、playing、paused、over —— 并让状态转换显式且完备。不要从副作用推断状态。
- 用当前活动状态来门控模拟:仅在 playing 时推进玩法、计时器和物理。
捕获输入与暂停
- 从用户手势(例如点击)请求指针锁定,绝不要在加载时请求。将丢失指针锁定和标签页失焦视为暂停:冻结模拟和时钟,并在下一次手势时恢复。
- 让
pointerlockchange具备幂等性:当document.pointerLockElement是 canvas 时,将 ready 或 paused 转换为 playing,并保持 playing 不变;仅当该元素不再是 canvas 时,才将 playing 转换为 paused。绝不要将其实现为切换。浏览器和自动化都可能报告已经获取的锁定,重复的 enter 事件绝不能暂停游戏。 - 在集成任何内容之前先钳制每帧 delta,正如
build-app所要求的那样,这样后台标签页或慢帧就不会把一个大步长注入移动、冷却或时钟。
重置
- 重置会将每个受管理的系统恢复到其 ready 值 —— 实体、相机、时钟、计时器、冷却、效果和叠加层 —— 而不仅仅是玩家。让重置走与初始状态相同的设置路径,这样 ready 和 reset 就不会彼此漂移。
- 在释放指针锁定之前,显式转换到
ready。绝不要从document.pointerLockElement推导重置状态;指针锁定是输入的副作用,而不是状态机。 - 一次性定义计时器语义,并在状态和快照中保持其字面含义。名为
reload的字段表示剩余冷却时间:0表示就绪,开火会赋予一个正的持续时间,活动循环会将其倒数到恰好0。不要在该名称下暴露归一化的就绪值。
证明循环
用真实输入驱动完整周期:进入游玩,丢失指针锁定并确认时钟和模拟冻结,恢复,重置并确认每个字段都返回到其 ready 值,然后到达结束状态并重新开始。要从应用自身的状态快照中读取这些内容,绝不要从控制台修改中读取 —— 人为制造的状态不是证据。
使用 build-app skill 选择创作界面,并在创建应用的界面中掌管循环和生命周期。
评论
支持 Markdown