mcpField
M
manage-game-state

manage-game-state

github.com/playcanvas开发31170 次安装1 周前更新
代码仓库

关于 manage-game-state

面向游戏开发的技能指南,强调用显式状态机管理游戏循环、输入、暂停与重置,并通过真实输入验证完整生命周期。

主要功能

  1. 01显式状态与完整转换
  2. 02按活动状态推进模拟
  3. 03处理指针锁定与失焦暂停
  4. 04重置所有游戏系统
  5. 05用状态快照验证循环

适用场景

  1. 01设计游戏状态与转换
  2. 02实现暂停和恢复行为
  3. 03确保重置恢复初始状态
  4. 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