--- name: arcade-ai description: Use when building or modifying a Microsoft MakeCode Arcade game — scaffolds a project, runs a live studio embedding the official editor, and provides an offline API/limits/pitfalls reference. --- # MakeCode Arcade AI Studio 帮助用 AI 开发 Microsoft MakeCode Arcade 游戏:脚手架 + 嵌入官方编辑器的实时双向同步 studio + 离线参考手册。 ## 何时用 - 用户想做 / 改 arcade 游戏、像素小游戏、makecode 游戏时。 ## 怎么用(四个命令) 1. 起项目:`npx arcade-ai init [--template blank|platformer|flappy] [--tool claude|trae|agents]` **执行 init 前,先问用户想做哪种游戏,根据回答选模板:** - `--template blank`(**默认**):空白项目,只有最简单的精灵和地图引用,适合从零开始。 - `--template platformer`:横版平台跳跃,含地图、敌人、重力跳跃,推荐有明确玩法时选。 - `--template flappy`:Flappy Bird 风格,管道障碍 + 重力下坠,推荐单一机制练习。 生成纯 TS 脚手架,并把规则文件与 `reference/` 一并拷进项目。 2. 复刻分享项目:`npx aca clone <分享链接> [dir] [--tool claude|trae|agents]` - 支持 `https://makecode.com/_XXXXX` 短链和 `https://arcade.makecode.com/数字-ID` 两种格式。 - Blocks 或 Python 项目自动转为纯 TS:删除 `main.blocks`/`main.py`,`preferredEditor` 改为 `tsprj`。 - 目录名默认取项目名称的 slug。 3. 起 studio:在项目目录 `npx aca dev` —— 浏览器实时预览,AI 改 `game/main.ts` 自动刷新; 在编辑器里改代码/画精灵也会回写磁盘(双向)。 4. 协议自检:`npx aca check` —— 验证官方编辑器握手 + 代码真渲染(联网,需 puppeteer)。 > **Blocks / Python 项目提示**:`clone` 后 `main.ts` 是自动转换的 TypeScript,可读性较差。 > 建议克隆完成后让 AI 先整理代码结构(重命名变量、拆函数),再开始修改游戏逻辑。 ## 接手项目时必须先读文档 > ⚠️ 文档在**项目目录**里,由 `aca init` 或 `aca clone` 自动拷入,不在 skill 安装目录。 > 路径是 `<项目目录>/reference/`,不是 `docs/` 或其他位置。 拿到一个 arcade 项目(或准备写代码)时,**第一步读以下文件,不要跳过**: - `reference/arcade-api.md` —— 完整 API 签名速查(sprites/game/scene/tiles/info/music/effects/extensions 全覆盖) - `reference/patterns.md` —— 89 款 playground 游戏提炼的代码模式,可直接复制(对象模型、platformer、debounce、Boss fiber、tilemap 出生点等) - `reference/pitfalls.md` —— 臆造 API 对照表 + 已知崩溃坑(动手前必扫) - `reference/limits.md` —— 硬件/内存/JS 语言限制 - `reference/project-format.md` —— pxt.json / assets.json 格式 读完文档后,**必须充分阅读当前游戏代码再动手**: - 先读 `game/main.ts` 的全局变量、`namespace SpriteKind`、初始化代码、事件注册、`game.onUpdate*`、`timer.*`。 - 再读 `game/pxt.json` 的依赖和 `files`,确认扩展库是否存在,不要直接使用未声明扩展。 - 如果有 `assets.json` / `*.g.ts` / `*.g.jres`,先确认已有资源名,再用 `assets.image\`name\``、`assets.tile\`name\``、`assets.tilemap\`name\`` 引用。 - 修改前先理解现有函数分工和状态流,优先复用已有函数与 SpriteKind,不要重写一套平行结构。 读完再动手,遇到不确认的 API 回来查,不要靠记忆臆造。 ## 改完代码后必须验证编译结果 改 `game/main.ts` 后,studio 会自动 reload 并触发 MakeCode 编译(需要约 15-30 秒)。 **验证步骤:** 1. 记录写文件前的当前时间 `T` 2. 写入 `game/main.ts` 3. 等待 35 秒 4. 读取 `game/.aca-status`,格式为 `2026-06-21T10:30:05Z ok` 5. 如果文件里的时间戳 > T → 这是本次改动的结果: - `ok` → 编译成功,继续 - `error` → 编译失败,**立刻对照 `reference/pitfalls.md` 第 6 节检查是否臆造了 API**,然后去浏览器编辑器看具体报错行号 6. 如果时间戳 ≤ T → 结果还没出来,再等 15 秒重读 **编译失败最常见原因**:使用了 Arcade 不存在的 API(见 pitfalls.md 第 6 节"AI 常见臆造 API"表格)。 ## 写代码硬约束(违反会翻车) - 代码只写 `game/main.ts`;资源(精灵/地图,4-bit 16 色)走 `game/assets.json`,不内联大图到 JS。 - **纯 TS 项目**:`game/` 里不要 `main.blocks`,`pxt.json` 的 `files` 也不列它, `preferredEditor` 用 `tsprj`。否则编辑器会开在空白积木视图、看不到代码。 - `assets.json` 必须是合法 JSON(空资源写 `{}`),不要清空成空文件。 - **地图**:用命名地图 `tiles.setCurrentTilemap(assets.tilemap`level`)`(编辑器自动建、人可画、自动同步回磁盘), 或 `createTilemap` 配**内置图块**(`sprites.castle.*`)。❌ 别把内联 `img` 当图块塞进 `createTilemap`,会崩。 - **不臆造 API**:`sprite.flipX`、`effects.xxx.createParticlesAt()` 等都不存在,写前查 pitfalls.md 第 6 节。 ## 查文档(按需读,不要全量背) > 文档由 `aca init` / `aca clone` 拷入**项目目录**的 `reference/` 下,不在 skill 目录。 - `reference/arcade-api.md` —— 完整 API 签名(全 namespace,含 enum 速查) - `reference/patterns.md` —— 可直接复制的游戏模式代码(从真实游戏提取) - `reference/pitfalls.md` —— 错→对速查表(遇到编译报错先查这里) - `reference/limits.md` —— 硬件/内存/JS 限制 - `reference/project-format.md` —— pxt.json / assets.json 格式 写代码前,遇到不确定的 API 或限制就读对应文件,不要凭记忆。