关于 phaser-debugger
phaser-debugger 是用于排查和修复 Phaser 4 问题的技能,强调依据错误信息和复现证据分析。它按 Phaser 生命周期追踪根因,并指导进行最小修复与验证。
主要功能
- 01基于证据诊断问题
- 02按 Phaser 生命周期排查
- 03静默故障诊断路径
- 04TypeScript 与冒烟测试验证
适用场景
- 01排查 Phaser 4 黑屏
- 02追踪无控制台错误的卡死
- 03查找场景重启后的资源泄漏
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ yakoub-ai/ phaser4-gamedev --skill phaser-debugger安装后在 Claude Code 中输入/phaser-debugger确认已加载。
附带文件references/agent-guidance.md
详细介绍
Phaser 4 调试器
使用此技能,根据证据诊断并修复 Phaser 4 问题,而不是猜测。
工作流程
- 收集具体症状、错误文本、堆栈跟踪、浏览器/设备环境,以及可用的复现步骤。
- 编辑前先阅读相关代码。对于黑屏,检查
src/main.ts、场景注册、场景切换、预加载路径,以及浏览器控制台/网络错误。 - 根据 Phaser 生命周期顺序追踪可能的根本原因:配置、预加载、创建、更新、资源键、物理体创建、碰撞、输入、场景启动/停止状态以及渲染深度。
- 以最小改动解决根本原因。
- 使用
npx tsc --noEmit验证 TypeScript 项目,并在可行时通过本地开发服务器进行冒烟测试。
调试检查清单
- 资源 404 和纹理键不匹配
- 场景未注册或场景键错误
- 场景初始化前就使用了
this.physics、this.input或this.anims - 创建对象时未启用物理,因此缺少 Arcade 物理体
- Collider/overlap 注册时使用了错误的对象或组
- 动画键/帧不匹配
- 深度/透明度/摄像机边界导致对象被遮挡
- 升级到 Phaser 4 后仍使用 Phaser 3 API
- 每帧分配对象、组无上限增长,以及缺少对象池
- 计时器事件未跟踪——未保存引用就调用
time.addEvent(),会导致计时器在场景重启期间不断累积 - 物理组未显式销毁——进化后的武器组和生成阶段组如果未执行
clear(true,true)并调用destroy(),就会泄漏 - 修改属性时未使用基础值 + 修正值模式——两个系统在同一帧写入同一属性会导致竞争条件,使属性值出错
- 按字符串相等进行通知去重——会丢弃合法的快速重复事件(例如 200 ms 内拾取两枚金币);应改用时间窗口去重
- 覆盖层/面板背景尺寸取自模块级常量——尺寸会固定在启动时的大小;应使用
this.cameras.main.width/height并添加调整大小监听器
常见的静默故障类别
当游戏冻结或行为异常且没有控制台错误时,先尝试以下快速诊断方法,再查阅完整指南 references/agent-guidance.md。
静默冻结(无错误):
// Add to main.ts BEFORE new Phaser.Game(config)
window.onerror = (msg, _src, _line, _col, err) => {
console.error('GLOBAL ERROR:', msg, err?.stack);
};
window.onunhandledrejection = (ev) => {
console.error('UNHANDLED REJECTION:', ev.reason);
};
然后强制刷新。之前任何静默故障现在都会记录日志。完整检查清单请参见 references/agent-guidance.md → Silent Freeze。
会话中途停止生成(无错误):
对象池槽位泄漏——实体离开摄像机视野后没有回收其槽位。在生成调用中添加 console.log('pool free:', pool.getTotalFree())。如果数值降到零并保持不变,就说明有槽位被占用。请参见 references/agent-guidance.md → Pool Slot Leak。
强制播放的动画只播放一帧就恢复:
实体的 update() 在下一次更新时覆盖了强制动画。使用 cinematicMode 标记修复。请参见 skills/phaser-animation/references/state-machine-patterns.md。
速度或属性值间歇性跳变到错误值:
两个系统在同一帧修改了同一属性。使用基础值 + 修正值模式。请参见 references/agent-guidance.md → Race Between Two Systems。
错误触发实体卡住检测(误报或漏报):
推挤墙壁时,body.velocity 返回 0。改用位置差值采样。请参见 references/agent-guidance.md → Stuck Detection Fails。
完整指南
如需完整的诊断手册,请阅读 references/agent-guidance.md。该文件复制自 Claude 子 Agent 定义,但应作为可移植技能使用;忽略 model、color 和 tools 等仅适用于 Claude 的字段。