Files
wechat-minigame/docs/03-content-pipeline.md
manpengan e74ac1e91e docs: Phase 1 立项完成 — 城市抓猫猫
- 01-project-charter.md: 立项书(方向/MVP范围/成功指标/待决策项)
- 02-game-design.md: 游戏设计(玩法规则/地图/猫猫/图鉴/广告/分享)
- 03-content-pipeline.md: 内容管线(数据结构/素材规范/分包策略)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 22:31:31 +08:00

9.4 KiB
Raw Blame History

03 Content Pipeline — 城市抓猫猫

1. 城市数据结构

每个城市是一个独立的内容包。使用 JS module 格式(微信小游戏 require() 不支持 JSON

1.1 城市配置

// cities/beijing.js
module.exports = {
  id: 'beijing',
  name: '北京',
  nameEn: 'Beijing',
  continent: 'asia',
  // 地图封面
  cover: {
    catImage: 'images/cats/beijing.png',    // 猫猫头像
    bgColor: '#CC2936',                      // 城市主色调
  },
  // 城市文化信息
  culture: {
    tagline: '天安门前看猫猫',               // 一句话标语
    funFact: '北京是世界上拥有最多宫殿的城市', // 文化冷知识
  },
  // 特色元素列表12-15个
  elements: [
    { id: 'beijing_01', name: '糖葫芦', category: 'food', image: 'elements/beijing/tanghulu.png' },
    { id: 'beijing_02', name: '京剧脸谱', category: 'culture', image: 'elements/beijing/opera_mask.png' },
    // ... 12-15 个
  ],
  // 关卡配置6关
  levels: [
    { id: 1, elementCount: 6,  piecesPerElement: 3, layers: 2, density: 'low' },
    { id: 2, elementCount: 7,  piecesPerElement: 3, layers: 2, density: 'low' },
    { id: 3, elementCount: 8,  piecesPerElement: 3, layers: 3, density: 'medium' },
    { id: 4, elementCount: 9,  piecesPerElement: 3, layers: 3, density: 'medium' },
    { id: 5, elementCount: 10, piecesPerElement: 3, layers: 4, density: 'medium_high' },
    { id: 6, elementCount: 10, piecesPerElement: [3,3,3,3,3,6,3,3,3,3], layers: 4, density: 'high' },
  ],
}

字段说明:

字段 类型 必填 说明
id string Y 城市唯一标识,小写英文,用于文件路径
name string Y 中文名
nameEn string Y 英文名
continent string Y 所属洲 id
cover.catImage string Y 猫猫头像路径(相对于资源根目录)
cover.bgColor string Y 城市主色调 HEX
culture.tagline string Y 一句话标语,不超过 10 个字
culture.funFact string Y 文化冷知识,不超过 25 个字
elements[].id string Y 格式 {city_id}_{两位序号}
elements[].name string Y 元素中文名
elements[].category string Y 分类:food / culture / landmark / nature / item
elements[].image string Y 图片路径(相对于资源根目录)
levels[].piecesPerElement number|number[] Y 3 的倍数;数组时长度须等于 elementCount

1.2 洲索引配置

// continents/asia.js
module.exports = {
  id: 'asia',
  name: '亚洲',
  nameEn: 'Asia',
  bgColor: '#FF6B6B',
  cities: ['beijing', 'tokyo', 'bangkok', 'seoul', 'singapore', 'istanbul'],
  unlockOrder: ['beijing', 'tokyo', 'bangkok', 'seoul', 'singapore', 'istanbul'],
}

unlockOrder 决定城市解锁顺序:通关前一个城市后解锁下一个。


2. 素材规范

2.1 元素图标

项目 规范
尺寸 128x128px @2x实际渲染 64x64
格式 PNG透明背景
风格 扁平冰箱贴风 -- 圆角矩形白底 + 彩色图标 + 1px 浅灰描边 + 微投影
色彩 高饱和度,同城市内元素色彩需有区分度(消除时快速识别)
命名 {city_id}_{序号}.png,如 beijing_01.png

2.2 猫猫头像

项目 规范
尺寸 封面 256x256px @2x + 图鉴 128x128px @2x
格式 PNG透明背景
风格 正面朝向的扁平猫猫头,统一基础轮廓 + 城市特色装饰
差异化 通过颜色、花纹、头饰/装饰体现城市特色
命名 cat_{city_id}.png(封面)、cat_{city_id}_thumb.png(图鉴)

2.3 城市背景

  • 不做复杂背景图
  • 用城市主色调 (bgColor) 作为纯色/渐变底
  • 可选:底部用 2-3 个城市地标的简笔剪影

2.4 音效

音效 描述 时长
点击拾取 轻快的"叮" 0.1s
三消消除 满足感的"嗒嗒嗒"连续音 0.3s
通关 猫叫 + 欢快音效 1s
失败 温和的失望音(不要太负面) 0.5s

格式要求MP3单声道44.1kHz,单个文件 < 50KB。


3. 猫猫生成规则

3.1 基础模板

所有猫猫基于统一的基础轮廓模板:

  • 圆形头部
  • 三角形耳朵
  • 简笔五官(两眼 + 鼻 + 嘴 + 胡须)

3.2 差异化参数

参数 说明 示例
baseColor 主体毛色 北京: 橘色, 东京: 白色
pattern 花纹类型 虎斑 / 纯色 / 三花 / 奶牛
patternColor 花纹颜色 --
accessory 头饰/装饰 北京: 虎头帽, 东京: 招财猫铃铛
expression 表情 微笑 / 眯眼 / 吐舌

3.3 生产流程

  1. 用 AI 工具Midjourney / DALL-E / Stable Diffusion按参数生成初稿
  2. Prompt 模板:
    flat design cat head icon, {baseColor} cat with {pattern},
    wearing {accessory}, cute, simple, sticker style,
    white background, no text
    
  3. 人工修正:统一线条粗细、色彩饱和度、整体风格一致性
  4. 导出 2 个尺寸256px + 128px

4. 关卡配置格式

4.1 难度参数

{
  elementCount: 8,        // 使用多少种元素
  piecesPerElement: 3,    // 每种元素几个(必须是 3 的倍数)
  layers: 3,              // 堆叠层数
  density: 'medium',      // 遮挡密度low / medium / medium_high / high
}

难度递进规律: 关 1-2 低密度入门 -> 关 3-4 中密度爬坡 -> 关 5-6 高密度挑战。关 6 允许 piecesPerElement 为数组,制造不均匀分布的额外难度。

4.2 关卡布局生成

不手工摆放物件位置,用程序化生成器:

  • 输入: 难度参数 + 城市元素列表
  • 输出: 每个物件的 { elementId, x, y, layer, rotation }
  • 生成约束:
    • 每层物件不超过总数的 40%
    • 最底层至少有 30% 的物件初始可点击
    • 保证可解性(从目标状态反向推导)

4.3 难度验证

用脚本模拟 1000 次随机合理操作,验证通关率:

关卡 目标通关率
关 1 > 95%
关 2 > 90%
关 3 > 80%
关 4 > 70%
关 5 > 60%
关 6 50-60%

失败率过高时降低 densitylayers


5. 分包策略

5.1 包体划分

主包(<= 4MB
├── game.js + js/(核心框架、渲染引擎、游戏逻辑)    ~150KB
├── images/ui/(通用 UI 元素、按钮、图标)            ~300KB
├── images/cats/beijing.png首个城市猫猫头像        ~50KB
├── audio/通用音效6-8 个)                        ~300KB
├── cities/beijing.js首个城市数据配置               ~5KB
└── images/elements/beijing/(首个城市元素图标)       ~200KB
                                                    ─────────
                                                    ~1005KB

分包 - 城市包(每包 <= 2MB
└── sub-asia/
    ├── cities/tokyo.js + bangkok.js + ...
    ├── images/elements/tokyo/ + bangkok/ + ...
    └── images/cats/tokyo.png + bangkok.png + ...

5.2 首包预算分配

内容 预估大小 说明
代码(框架 + 逻辑) ~150KB 纯 Canvas 手写,无引擎
通用 UI 素材 ~300KB 按钮、图标、背景、字体
首城市素材(北京) ~250KB 15 元素 + 猫猫 + 封面
音效 ~300KB 6-8 个通用音效
合计 ~1000KB 利用率 25%,空间充裕

5.3 加载策略

  • 进入洲页面时预下载该洲分包(wx.preDownloadSubpackage
  • 单个城市包预估:配置 ~5KB + 元素图 15x10KB = ~155KB + 猫猫 ~30KB = ~190KB
  • 6 城市约 1.14MB,在分包限制内

6. MVP 城市清单与素材计划

6.1 首批 6 城市

城市 元素主题方向 猫猫特色
北京 糖葫芦、京剧脸谱、天安门、烤鸭、兔儿爷、长城砖、故宫角楼、豆汁、二锅头、鸟巢、铜锣、毛笔 橘猫 + 虎头帽
东京 寿司、招财猫、富士山、樱花、鸟居、拉面、抹茶、浮世绘、新干线、达摩、和服扇、章鱼烧 白猫 + 招财猫铃铛
曼谷 冬阴功、嘟嘟车、大象、泰拳手套、芒果糯米饭、金佛、莲花、榴莲、泰丝、椰子、船面、佛塔 暹罗猫配色 + 泰式花环
首尔 泡菜坛、石锅拌饭、韩服、景福宫、烧酒瓶、年糕、K-pop 话筒、太极旗扇、韩式炸鸡、柿子、海苔卷 韩国短尾猫 + 韩服小帽
新加坡 鱼尾狮、辣椒螃蟹、榴莲建筑、叻沙、金沙酒店、兰花、肉骨茶、冰激凌三明治、组屋、咖椰吐司 花猫 + 小狮子鬃毛
伊斯坦布尔 土耳其红茶、蓝色清真寺、热气球、烤肉串、郁金香、恶魔之眼、土耳其冰淇淋、地毯、石榴、旋转舞裙 安哥拉猫 + 恶魔之眼项圈

6.2 生产时间估算(单城市)

步骤 耗时 说明
元素清单确认 0.5h 确定 12-15 个特色元素
AI 出图 1h Prompt 生成 + 筛选
人工修正 2-3h 统一风格、调色、切图
猫猫设计 1h AI 出图 + 人工修正
数据配置 0.5h 写城市 JS module
单城市合计 5-6h --
6 城市合计 30-36h 可并行压缩