一个人+AI,5天做出一款微信小游戏的完整方法论

150 阅读23分钟

这不是一篇"看我做了什么"的秀,而是一套你今天就能用的方法论。我会把 5 天开发一款倒水排序小游戏过程中踩的每个坑、写过的每条 prompt、犯过的每个错误,都拆解成你可以直接复制的经验。


这篇文章能给你什么?

如果你是程序员,想用 AI 辅助开发微信小游戏(或任何 Canvas 2D 游戏),读完这篇你能得到:

  • 一套 spec.md 模板,让 AI 一次理解你想要什么
  • 4 个层级的 prompt 写法,从低效到高效的对比
  • 3 套 bug 报告模板,让视觉 bug 不再反复出现
  • 多模型协作工作流,用视觉大模型帮你"翻译"设计意图
  • 一个可复用的零引擎架构,14 个文件搞定完整游戏
  • 真实的踩坑记录,帮你绕过我走过的弯路

背景:我用 Claude Code 花了 5 天做了一款微信原生 Canvas 2D 小游戏——「碰个瓶」(水排序解谜),117 条对话,14 个 JS 文件,零第三方引擎。以下所有 prompt 示例和踩坑记录都来自真实对话。


第一课:写 spec 还是直接开干?

结论先行:花 30% 时间写 spec,节省 70% 的返工时间。

很多人上来就跟 AI 说"帮我做个倒水游戏"——别这么干。AI 会按自己的理解去实现,结果大概率不是你想要的。你会陷入"改了这里坏了那里"的无限循环。

你的 spec.md 应该包含什么?

01-spec-template.png

以下是我用过的 6 个模块,按重要性排序。前 3 个必写,后 3 个推荐写:

模块 1:技术边界(必写)

告诉 AI 什么能用、什么不能用。不写这个,AI 可能给你引入 Phaser、Three.js,然后你发现微信包体超了 4MB。

## 1. 项目概述
- **平台**:微信小游戏(原生 Canvas 2D API)
- **技术约束**:禁止使用 Phaser、Cocos、LayaBox 等任何第三方引擎
- **包体限制**:4MB 以内

模块 2:游戏规则(必写)

每条规则单独列出,覆盖所有边界条件。不要怕啰嗦——AI 理解自然语言的边界条件比理解模糊描述强得多。

## 2. 游戏机制
- 瓶子容量:固定 4 层
- 倒水源:只能从瓶子最顶部倒出
- 倒入条件:目标瓶为空 OR 顶部颜色相同
- 倒水量:k = min(源瓶顶部连续同色层数, 目标瓶剩余空间)
- 胜利条件:所有非空瓶子均为纯色

对比效果:有这段 spec,Claude Code 一次就写对了完整的倒水规则引擎、Undo 栈和胜负判定逻辑。没有的话,你至少要来回 5 轮才能把边界条件改对。

模块 3:视觉参数(最核心!)

这是我最重要的经验:视觉描述必须数字化。 不要说"好看的渐变",说 rgba(255,255,255,0.35)。不要说"流畅的动画",说 300ms, Back.Out 缓动

## 3. 视觉规格
### 液体渲染
- 横向渐变:light(0~0.3) → base(0.5) → dark(0.8~1.0)
- 左侧高光条:宽 8px,白色 opacity 0.25
- 右侧暗边:宽 5px,rgba(0,0,0,0.12)
- 液面弧度:椭圆高度 7px,opacity 1.0

### 倒水动画时序
| 阶段   | 时间       | 缓动       |
|--------|-----------|------------|
| 预备   | 0ms       | —          |
| 倾斜   | 0-300ms   | Back.Out   |
| 水流   | 200-800ms | —          |
| 回正   | 800-1000ms| Quad.Out   |

模块 4-6:数据结构 / 资源分工表 / 验收标准

## 5. 数据结构
type Color = 'yellow' | 'orange' | 'blue' | ...
bottles: Color[][]    // 二维数组,每个子数组从底到顶
history: Color[][][]  // Undo 栈,每步深拷贝

## 6. 资源清单
【AI生成】bg_wall.png   750×1334  背景
  Prompt: "Mobile game background, cozy drink shop..."
【代码绘制】液体/水流/粒子  Canvas 动态渲染

## 9. 验收标准
P0: 核心玩法可运行,无闪退
P1: 倒水动画含倾斜+水流+弹性增长,≥50fps
P2: 主题包装完整

spec 的核心原则:改了代码就改 spec

这是我给 Claude Code 对话窗口起的名字——"记得后面每次更改逻辑都需要同步更新 spec.md 内容"

spec 是"单一事实来源"。如果代码和 spec 不一致,AI 下次参考 spec 时就会引入矛盾。每次让 Claude Code 改逻辑,同时让它更新 spec.md。


第二课:跟 AI 说话的正确姿势

这是我 5 天里最大的成长——学会了怎么写 prompt 效率能差 10 倍

同一个需求的 4 种写法对比

02-prompt-levels.png

我拿"让液体看起来有立体感"这个需求,展示真实迭代过程:

Level 1 — 我最初的写法(迭代了 5+ 轮没搞定):

我想要把瓶子中水看上去更立体点

AI 理解"立体"可以是加阴影、加渐变、加 3D 透视、加光照……它不知道你具体要哪个。

Level 2 — 稍好:

液体需要横向渐变,左亮右暗,模拟圆柱体积感

方向对了,但 AI 需要猜渐变比例、透明度、宽度——仍需 2-3 轮微调。

Level 3 — 推荐写法(基本一次过):

横向渐变: light(0~0.3) → base(0.5) → dark(0.8~1.0)
左侧高光条 8px 白色 opacity 0.25
右侧暗边 5px rgba(0,0,0,0.12)

Level 4 — 当你想一步到位时:

渲染顺序: ①背面玻璃底色(rgba(255,255,255,0.22~0.35))
         → ②液体层(横向渐变+椭圆液面)
         → ③前面玻璃高光(左10px白opacity0.35 + 描边内3.5px白外1.5px深)

你可以直接用的 Prompt 模板

04-prompt-template.png

我总结出视觉类 prompt 最高效的"三段式"结构:

# 角色
你是资深的微信小游戏前端开发 + 休闲游戏美术工程师,
擅长用 Canvas 2D 实现伪 3D(2.5D 等距视角)的卡通渲染效果。

# 视觉规格(全部用数字)
- 瓶身: 宽110px 高264px, 椭圆比0.27
- 瓶颈: 瓶身宽的60%, 凸缘65%
- 各段高度: 凸缘5% / 瓶颈4% / 肩部6% / 瓶身85%
- 玻璃: 填充rgba(255,255,255,0.15), 描边2-3px白色
- 高光: 左侧纵向条 宽8%瓶宽, opacity 0.6

# 交付格式
1. 先输出视觉分析(3-5条)
2. 文件结构
3. 完整代码(BottleRenderer 类 + draw() 方法)
4. 调优清单(至少5条)

为什么要写"交付格式"? 因为不写的话,AI 可能给你一段不完整的代码片段,你还得再来一轮说"请给完整代码"。提前约定好格式,一次拿到想要的输出。

绝招:让 AI 教你写 Prompt

这是我的一个意外发现——当你不知道怎么描述一个视觉效果时,可以直接问 AI:

如果要实现给的图片样的效果(有阴影、有立体感),
我该如何给提示词和组织语言呢?

AI 会告诉你应该描述哪些维度(光源方向、透明度、渐变方式、阴影参数),然后你用这些维度去写具体的 prompt。等于让 AI 教你怎么跟 AI 说话。


第三课:多模型协作——让大模型帮你"翻译"视觉意图

这是我整个开发过程中最提效的一个发现:不要只用一个模型,用多个模型各司其职。

核心痛点:你看得到差距,但说不出来

你打开竞品游戏截了个图,又打开自己的游戏截了个图。你能看到差距——人家的瓶子有玻璃质感,你的像塑料桶。但你不知道怎么用技术语言描述这个差距。

如果你直接跟 Claude Code 说"把瓶子做得像参考图一样好看"——它无法"看"图片(CLI 模式下),就算能看,它也不知道你觉得哪里差。

解决方案:视觉大模型做"翻译官"

07-multi-model.png

工作流是这样的:

Step 1: 你截两张图(竞品效果 + 当前效果)
        ↓ 贴图 + 描述差异点
Step 2: 发给视觉大模型(Opus 4.7 / GPT-5.5 等)
        它能"看懂"图片,输出精确的技术参数
        ↓ 拿到 prompt(可微调)
Step 3: 把 prompt 喂给 Claude Code
        Claude Code 按参数写代码
        ↓
Step 4: 运行 → 看效果 → 满意就下一个,不满意回 Step 1

真实案例:瓶子玻璃质感的实现

Step 1 — 你发给视觉大模型的内容:

[贴两张截图]

左图是 Ball Sort Puzzle 的瓶子效果(参考),右图是我当前的效果。
差异点:
1. 参考图的瓶子有玻璃通透感,我的像实心塑料
2. 参考图液体有圆柱立体感(左亮右暗),我的是纯色块
3. 参考图瓶底有椭圆投影,我的没有阴影

请输出一份 Canvas 2D 渲染参数,包含具体的 rgba 值、
像素尺寸、渐变方向和渲染层级顺序,
让开发工具可以直接实现这个效果。

Step 2 — 视觉大模型输出的 Prompt(节选):

渲染顺序(从后到前):
① 背面玻璃底色:线性渐变 rgba(255,255,255,0.22) → rgba(255,255,255,0.35)
② 液体层:
   - 横向渐变 light(0~0.3) → base(0.5) → dark(0.8~1.0)
   - 左侧高光条 8px 白色 opacity 0.25
   - 液面椭圆 height=7px
③ 前面玻璃高光:
   - 左侧纵向高光 10px 白色 opacity 0.35
   - 右侧弱反光 4px opacity 0.08
   - 瓶肩弧形反射线
④ 描边:内层白色 3.5px + 外层深色 1.5px
⑤ 地面投影:椭圆 blur=12 rgba(0,0,0,0.3) 偏移(4,8)

Step 3 — 你微调后喂给 Claude Code:

你可能觉得 opacity 0.35 太亮了,改成 0.25。或者觉得描边 3.5px 太粗,改成 2px。微调后直接发给 Claude Code,它拿到精确参数就能一次实现。

为什么这样做效率最高?

因为每个模型做它最擅长的事:

模型擅长的事不擅长的事
视觉大模型(Opus 4.7/GPT-5.5)看图 → 输出技术描述不能直接改你的代码
Claude Code(Opus 编码模式)理解文字 → 修改代码CLI 模式下不能看截图
判断效果好不好写不出精确的 rgba 参数

三者组合形成了完整的闭环:你用眼睛判断,视觉大模型用理解力翻译,Claude Code 用编码力实现。

你可以直接用的"翻译"提示词模板

发给视觉大模型时,用这个模板最高效:

[贴截图A: 参考效果] [贴截图B: 当前效果]

## 差异点
1. [你看到的第一个差距]
2. [你看到的第二个差距]
3. [你看到的第三个差距]

## 需要你输出
请分析两图的视觉差异,输出一份可以直接让
Canvas 2D 开发工程师实现的技术参数,包含:
- 具体的 rgba 颜色值和透明度
- 像素级的尺寸参数
- 渲染层级顺序(从后往前)
- 渐变方向和关键点位置
- 阴影/高光/描边的具体参数

关键:描述差异点是你要做的事。 你不需要知道怎么修,但你需要指出哪里不对。大模型看了图 + 你的描述,就能精确输出修复方案。


第四课:视觉 Bug 修不好?你的问题报告写错了

这是我踩的最大的坑——一个"液体没贴底"的 bug 修了 4 次,每次都回来

为什么会修了又回来?

因为我一开始的 bug 报告是这样的:

瓶子最下面应该要充满液体

AI 不知道"没充满"差了多少,不知道是哪个坐标算错了,只能猜着改。改了一处可能影响另一处,于是 bug 反复出现。

正确的做法:数据驱动修 Bug

03-debug-formula.png

我后来总结出的"三步修 Bug 法":

Step 1:让 AI 先加 debug 日志(不是直接修!)

请在 drawLiquids 函数开头添加以下日志:
console.log('瓶底Y:', bodyBottom);
console.log('液体区起始Y:', liquidAreaTop);
liquids.forEach((l, i) => {
  console.log(`第${i}层 bottomY:`, bodyBottom - i * layerH);
});

Step 2:运行后,把真实数据贴给 AI

模拟器输出:
瓶底Y: 264
液体区起始Y: 39.6
第0层 bottomY: 220   ← 瓶底264但液体只到220,差了44px!

Step 3:给 AI 根因分析 + 精确修复指令

根因:layerH = bodyH / 4 计算错误
     bodyH 包含了瓶颈+肩部高度,但液体不进入瓶颈区域

❌ 当前: this.layerH = this.H / this.maxLayers
✅ 修改为: this.layerH = (this.bodyBot - this.shoulderBot) / this.maxLayers

这次一轮搞定,再没复现。

3 套可复用的 Bug 报告模板

05-bug-templates.png

模板 A:视觉对比型(适合布局/定位问题)

## 问题
❌ 当前: 液体浮在瓶子中间
✅ 期望: 液体紧贴瓶底

## ASCII 对比
错误:      正确:
│ ▓▓▓ │   │     │
│     │   │ ▓▓▓ │
╰─────╯   ╰─────╯

模板 B:数据驱动型(适合坐标/尺寸计算问题)

## 请先加 debug 日志
console.log('瓶底Y:', bodyBottom);
console.log('第0层Y:', layerBottomY);

## 模拟器实际输出
瓶底Y: 264, 第0层Y: 220 ← 差了44px!

## 根因 + 修复
layerH 计算包含了瓶颈高度,应只计算液体可用区域

模板 C:优先级标签型(适合多个问题同时存在)

## 🔴 P0 关键:液体未贴底(必须修)
## 🟠 P1 重要:层间分隔线太粗 2.5px→1.5px
## 🟢 P2 优化:瓶肩弧度可更圆润

## 验收标准
- [ ] 4层液体贴紧瓶底,无空隙
- [ ] 分隔线清晰但不突兀

一个血泪教训:不要暴力全删

我有一次对瓶身白色描边太粗感到烦躁,写了这样的 prompt:

把代码里所有 ctx.strokeStyle = 'rgba(255, 255, 255 开头的
代码全部注释掉或删除

结果:描边是没了,但空瓶子也看不见了,布局全乱了,又花了 3 轮修副作用。

正确做法:先让 AI 列出所有 stroke 调用的位置,然后只改目标位置的参数(0.8 → 0.25),不删除。


第五课:零引擎架构——你可以直接拿去用

做微信小游戏不需要引擎。Canvas 2D 足够简单,而且微信包体限 4MB,引入 Phaser/Cocos 直接超标。

14 个文件的架构

06-architecture.png

这套架构可以直接复用到你的项目:

你的小游戏/
├── game.js                      # 入口 (~100行)
├── spec.md                      # 设计规格
├── js/
│   ├── base/                    # ← 这4个文件每个游戏都一样
│   │   ├── sceneManager.js      #   场景管理器
│   │   └── tween.js             #   补间动画引擎
│   ├── data/
│   │   ├── config.js            #   全局参数(一处修改)
│   │   └── levels.js            #   关卡数据
│   ├── objects/
│   │   ├── bottle.js            #   游戏对象
│   │   └── particle.js          #   粒子系统
│   ├── scenes/
│   │   ├── gameScene.js         #   核心场景(主战场)
│   │   └── resultScene.js       #   结算场景
│   └── utils/
│       ├── audio.js             #   音频(wx.createInnerAudioContext)
│       ├── imageManager.js      #   图片预加载
│       ├── renderer.js          #   渲染工具
│       └── storage.js           #   存储(wx.setStorageSync)
├── images/                      # AI生成的美术资源
└── audio/                       # 音效

让 Claude Code 一次生成基础设施

你可以用一条 prompt 让 AI 生成上面 js/base/ 里的所有基础文件:

帮我搭建一个微信小游戏的基础框架:
1. game.js 入口:Canvas 2D + HiDPI适配 + 设计分辨率750×1334 + requestAnimationFrame主循环
2. SceneManager:register(name, scene) / switchTo(name, params) / 输入事件分发
3. Tween 引擎:支持 linear/quadOut/backOut/elasticOut/bounceOut 缓动函数
4. ImageManager:preload([paths]) 批量预加载 + get(path) 获取
5. Audio:基于 wx.createInnerAudioContext 的音频管理器
6. Storage:wx.setStorageSync/getStorageSync 的简单封装

技术约束:纯 Canvas 2D,禁止第三方引擎,每个模块一个文件

这套基础设施我做了 10+ 款小游戏,每次都是让 AI 基于这个模板一次生成,然后只改游戏逻辑部分。

关键设计原则:参数集中到 config.js

// config.js — 所有可调参数集中在这里
const CONFIG = {
  colors: {
    yellow: { base: '#FFD426', light: '#FFE566', dark: '#E6B800' },
    // ...
  },
  bottle: { width: 110, height: 264, maxLayers: 4 },
  anim: {
    pourTiltDuration: 150,      // 倾斜耗时
    pourTiltAngle: -Math.PI * 0.55,  // 倾斜角度
    streamWidth: 10,            // 水流宽度
  },
};

好处:调参数不用翻代码逻辑。跟 AI 说"把倾斜角度改成 100 度",它只改 config.js 一行。


第六课:Claude Code 擅长逻辑,但游戏更需要美术和动效

这是我开发过程中最深的一个体会:Claude Code 是代码逻辑的天才,但游戏的灵魂在美术和动效——而这恰恰是纯代码 AI 的短板。

Claude Code 能一次搞定的事

倒水逻辑引擎、Undo/Redo 栈、关卡数据生成、缓动函数库、微信 API 封装——这些纯逻辑的东西,Claude Code 基本一条 prompt 就写对了。规则明确、边界清晰的任务,它比人快 10 倍。

但游戏不只是逻辑

一个水排序游戏,逻辑可能只占 20% 的工作量。剩下 80% 是什么?

  • 瓶子要看起来像透明玻璃,不是塑料杯
  • 液体要有左亮右暗的渐变,像真实的圆柱体
  • 倒水要有弧线水流 + 溅射水花 + 液面弹性上升
  • 盖塞要有咔嗒音效 + 手机震动的仪式感
  • 背景、袋子、按钮需要精致的美术素材
  • 通关页面需要烟花动效 + 成就数据展示

这些东西,Claude Code 写出来的代码逻辑可能是对的,但视觉效果对不对、动画节奏好不好,它自己看不到。CLI 模式下没有眼睛,它只能靠你的反馈来迭代。

解决方案:AI 素材生成 + 多模型协作

我的做法是把美术和动效拆成两条线并行推进:

静态美术 → AI 图片生成工具搞定。 背景图、购物袋、瓶塞、通关页面背景——这些不需要动态变化的素材,用 AI 图片生成(Midjourney / 豆包等)直接出图,效果比自己画好得多。我这个游戏里 20+ 张美术素材全部是 AI 生成的。

动态效果 → Claude Code 写代码 + 视觉大模型翻译。 液体渐变、水流动画、粒子特效这些必须用代码实现的效果,我用视觉大模型(能看图的 AI)帮我把「我觉得不好看」翻译成精确的参数,再喂给 Claude Code 去改代码。

spec 中提前标记分工:

【AI生成】bg_wall.png — 用 AI 图片工具生成
【AI生成】bag_*.png8个颜色的购物袋
【代码绘制】液体/水流/粒子 — Claude CodeCanvas API 实现

这样 Claude Code 写代码时,对 AI 生成的图片预留 drawImage 接口 + 纯色占位。美术素材什么时候到位,什么时候替换进去,互不耽误。

核心认知:Claude Code 是最强的「代码手」,但做游戏你还需要「美术眼」。AI 图片生成工具就是你的美术团队,视觉大模型就是你的「设计→代码」翻译官。三者组合,才是一个人做出精致游戏的完整工具链。


第七课:人和 AI 各做什么最高效?

5 天下来,我发现了清晰的效率分界线。

AI 一次搞定的事(你别自己写)

事项一条 prompt 搞定
倒水逻辑引擎"按 spec 第 2 节实现倒水规则"
Undo/Redo 栈"每步保存 bottles 深拷贝"
关卡数据生成"生成 10 关数据,3色→7色递增难度"
Tween 动画引擎"实现 7 种缓动函数"
微信 API 封装"封装 storage/audio/ad 模块"

必须靠人迭代的事(别指望一次过)

事项为什么
2.5D 瓶子外观迭代了 15 轮,AI 无法"看到"效果
动画节奏感2.7s→2s→1.5s,必须人眼判断
配色微调rgba 的最后一位差 0.1 效果完全不同
功能取舍"去掉加瓶子按钮"——AI 不会替你做产品决策

人机并行工作流

这是效率最高的模式——AI 写代码的同时,你去用 Midjourney 生图:

spec 中标记资源分工:
【AI生成】bg_wall.pngClaude Code 在代码中预留 drawImage + 占位色块
【代码绘制】液体渲染 — Claude CodeCanvas API 实现

你的流程:
1. Claude Code 写代码(用色块占位 AI 图片位置)
2. 你同时用 Midjourney 生成背景/图标
3. 把 PNG 放进 images/ 目录 → 自动替换占位 → 完成

代码中预留接口长这样:

// 如果有 AI 生成的背景图就用,没有就用纯色占位
const bgImg = ImageManager.get('images/bg_wall.png');
if (bgImg) {
  ctx.drawImage(bgImg, 0, 0, 750, 1334);
} else {
  ctx.fillStyle = '#1a1a3e';  // 占位纯色
  ctx.fillRect(0, 0, 750, 1334);
}

这意味着你的游戏在没有任何美术资源的情况下就能跑通逻辑。 美术是最后才替换进去的。


第八课:我踩过的坑,帮你绕过去

坑 1:别用 AI 生图做动态元素

我最初尝试用 Midjourney 生成瓶子图片(静态 PNG),然后发现:

  • 不同图的光影角度不一致
  • 瓶子倾斜时 PNG 无法跟着变形
  • 选中态高光无法动态叠加
  • 每次修改需要重新生图

Day 2 的关键决策:放弃 AI 瓶子图,全部改为 Canvas 代码绘制。

规律

  • 静态不变的东西 → AI 生图(背景、图标、按钮)
  • 需要交互/动画的东西 → Canvas 代码绘制(液体、粒子、水流)

坑 2:倒水动画从"瞬移"到"丝滑"的 7 轮打磨

这是真实的迭代过程,每轮的 prompt 和结果:

prompt 关键句结果
1"实现基本倒水动画"液体瞬间转移,毫无体验
2"加入瓶子抛物线飞行路径"有了飞行感,但没有倾斜
3"参考 Ball Sort Puzzle,倾斜 100°"倾斜了但没有水流效果
4"加贝塞尔曲线水流"水流弯弯曲曲不自然
5"水流改为 L 形直角路径"自然了!但 2.7 秒太慢
6"整个过程控制在 2 秒内"节奏对了
7"A 瓶子的水位需要随倾斜角度变化"完美

经验:动画类需求不可能一步到位,但每轮 prompt 要聚焦一个问题。不要一次提 5 个修改——AI 会把其中 3 个弄对、2 个弄错,然后你分不清哪些是新 bug。

坑 3:微信包体 4MB 超限

加入 20+ 张 AI 生成的 PNG 后:

Error: source size 5428KB exceed max limit 4MB

解决方案:

  1. 压缩图片(TinyPNG)
  2. 小图标合并成 spritesheet
  3. 能用代码画的就别用图片(比如渐变背景)

坑 4:Claude Code 上下文耗尽

长时间迭代视觉效果后,上下文窗口用完了。用 /compact 压缩上下文继续开发:

/compact

Claude Code 会自动总结之前的对话,保留关键上下文继续工作。我 5 天开发只用了 5 个会话,关键信息始终连贯。


第九课:Claude Code 的进阶用法

1. Plan Mode —— 大改之前先出方案

当你要做复杂重构(比如整个瓶子渲染引擎升级),不要直接让 AI 改代码。用 Plan Mode:

# 在对话中自然触发 Plan Mode
"我想升级瓶子渲染引擎,从简单圆角矩形改为 2.5D 玻璃质感,
请先出一个改造方案,列出要改哪些文件、影响范围"

Claude Code 会进入计划模式,列出:

  • 需要修改的文件和行号
  • 每个修改的具体内容
  • 可能的风险点

你确认后它才开始改。这避免了"AI 改了 5 个文件但有 2 个改错了"的灾难。

2. 对话窗口命名 —— 固化项目级规则

我给对话窗口起名叫"记得后面每次更改逻辑都需要同步更新 spec.md 内容"。

这不只是备忘——它会作为上下文一直提醒 Claude Code。你可以用类似的方式固化项目规则:

  • "所有颜色值统一走 config.js 不要硬编码"
  • "新增功能前先更新 spec.md"
  • "Canvas 绑定设计分辨率 750x1334"

3. 角色设定 —— 在关键时刻激活专业知识

不需要每条 prompt 都写角色设定,但在遇到专业问题时加上会显著提升效果:

# 角色
你是资深的微信小游戏前端开发 + 休闲游戏美术工程师,
擅长用 Canvas / SVG / CSS 实现伪 3D(2.5D 等距视角)的卡通渲染效果

我是在迭代了 20+ 轮瓶子 3D 效果后才加上这个角色设定的——加上之后效果明显提升。AI 开始主动考虑光影、玻璃折射、椭圆投影等专业细节。


快速行动清单

如果你今天就想开始用 Claude Code 做小游戏,按这个顺序走:

第 0 步:选型

  • 2D 休闲游戏 → 微信原生 Canvas 2D(零引擎)
  • 3D 或复杂 2D → Cocos Creator(但要注意包体大小)

第 1 步:写 spec.md(花半天)

  • 用本文的 6 模块模板
  • 视觉参数精确到 px / rgba / ms / 缓动函数
  • 标记每个资源的实现方式:【AI生成】或【代码绘制】

第 2 步:生成基础架构(一条 prompt)

  • SceneManager + Tween + ImageManager + Audio + Storage
  • 告诉 AI "技术约束:微信原生 Canvas 2D,禁止第三方引擎"

第 3 步:实现核心逻辑(1-2 天)

  • 让 AI "按 spec 第 2 节实现"
  • 用纯色矩形占位所有美术资源
  • 确保逻辑跑通——先能玩,再好看

第 4 步:视觉打磨(2-3 天,最耗时)

  • 用"三段式"prompt 模板:角色 + 参数 + 交付格式
  • bug 用"数据驱动修复法":加日志 → 贴数据 → 给修复指令
  • 同步用 Midjourney 生成静态美术资源

第 5 步:接入音效 + 广告 + 上线

  • wx.createInnerAudioContext 音效
  • wx.createRewardedVideoAd 激励广告
  • wx.setStorageSync 本地存档

最终成果:5 天的 Vibecoding 做出了什么?

game-screenshot.png

这就是 5 天 Vibecoding 的最终效果:

  • 2.5D 玻璃瓶:带通透玻璃质感、高光、瓶盖、椭圆投影
  • 7 种彩色液体:横向渐变 + 椭圆液面 + 层间分隔线,有真实的圆柱立体感
  • 丝滑倒水动画:拾起 → 飞行 → 倾斜 → 水流 → 液面弹性上升 → 回正,全程 2 秒
  • 完整功能:Undo / Shuffle / 音效 / 本地存档 / 微信分享

来玩一下?

微信搜索小游戏 「碰个瓶」 就能体验这个纯 Vibecoding 的作品。如果搜不到,说明还在审核中,敬请期待。

如果你觉得手感不错——这里面的每一行代码都是 Claude Code 写的,每一个视觉细节都是人和 AI 迭代出来的。

你也可以做到。 用这篇文章里的方法论,选一个你喜欢的小游戏类型,从写 spec.md 开始。


真实数据

指标数据
开发周期5 天
对话会话5 个
用户消息~117 条
源文件14 个 JS 文件
spec.md227 行
视觉迭代最多瓶子 3D 外观 15+ 轮
动画迭代最多倒水动画 7 轮
最顽固的 bug液体贴底问题 4 次复现
AI 生成图片20+ 张

最后

Vibecoding 的本质不是"让 AI 写代码"——而是把你变成一个有 AI 助手的全栈团队

你是产品经理(写 spec)+ 美术总监(审视觉)+ QA(报 bug)。 AI 是前端工程师 + 动画师 + 平台适配专家。 视觉大模型是你的"技术翻译官"——帮你把"我觉得不好看"转化成精确的 rgba 参数。

你不需要会写 Canvas 渲染代码,但你需要会说"左侧高光条 8px 白色 opacity 0.25"。

Prompt 写得好不好,决定了你是跟 AI 协作还是跟 AI 吵架。

如果这篇文章对你有帮助:

  1. 来玩玩成品 —— 微信搜「碰个瓶」,感受一下 Vibecoding 的实际效果(如果搜不到说明还在审核中)
  2. 动手试试 —— 选一个你喜欢的游戏类型,从写 spec.md 开始
  3. 分享给朋友 —— 让更多程序员知道这套方法论

逐光·AI实战手记