第15章 - 儿童向设计规范与实现

15.1 交互规范清单:规范与代码的对照

产品定位(6–12 岁、核心指标是「记住」)推导出一套交互规范。下表把每条规范与实现方式、当前状态对齐 —— 已实现的给出落点,未实现的明确标注为待做:

规范 实现方式 状态
可点击区域 ≥ 88×88 逻辑像素 BaseScene.addButton 默认 520×136;顶栏 DOM 按钮 min-h-12(48px 物理高) ✅
按钮不依赖悬停 按下瞬间下沉 9px + 音效;无 hover 语义 ✅
无失败惩罚、无倒计时、无限重试 放错弹回原位;后羿射掉最后一个太阳,天黑后太阳自己回来;诱惑有时限、不会等不到头 ✅
关键文本配拼音 典故馆卡片与典故卡都带 pinyin 字段 ✅
字号下限 28 设计像素 textStyle 基准:典故卡原文与出处已从 13.8 CSS px 提到 28 设计 px ✅
不靠颜色单独传达信息 对/错同时有图标与音效;女娲配对靠形状不靠颜色(色弱友好) ✅
尊重 prefers-reduced-motion ctx.reducedMotion 跳过场景淡入等动效 ✅
无广告、无外链、无分享诱导、不采集个人信息 遥测只本地缓冲、flush() 空实现;无任何第三方 SDK ✅
连续游玩 20 分钟提示休息 — ⏳ 规划中(阶段 1)
家长锁(退出/设置/清档长按 3 秒) — ⏳ 规划中(阶段 1)

这份清单的态度值得说明:项目把「没做的」明确列为「没做」,而不是含糊带过。规范写在方案里、代码里只做了能做的部分 —— 读者应该能分辨哪些是承诺、哪些是现状。

15.2 记忆工程的代码落点(回顾与串联)

第 1 章讲过五层记忆机制,这里把每一层的具体实现位置补全,作为一张可坐标化的地图:

层 机制 实现位置
L1 情境代入 分幕绘本 + 旁白;玩家扮演典故中的角色 templates/story.ts;defineGame 强制每局以故事开场
L2 关键抉择 关键动作由交互承载;keyMoment 提供揭晓语与复习题 各游戏场景(曹冲的「秤被压垮」、后羿的「射九留一」);reward.ts 播 keyMoment.reveal
L3 多通道编码 看(画面)+ 听(TTS 念读)+ 做(拖拽/连点)+ 说(跟读念白)+ 选(复习题) AudioBus.speak、orb.speak 归位念白、quiz 模板(待接线)
L4 收集与结构 典故卡 + 图鉴;卡按 yearApprox 排序 reward.ts 的 card:unlocked;AlbumView
L5 间隔重复 + 迁移 1/3/7/21/60 天调度;transfer 题 progress/review.ts;quiz 数据「每典故 3 题含 1 道迁移」由 schema 强制

这张表是整套架构的「为什么」:keyMoment、misconceptions、quiz.kind、card:unlocked、ReviewScheduler 这些看起来零散的设计,全部服务于同一件事。

15.3 「少写字,多动手」的三个案例

十二部游戏加起来,屏幕上几乎没有教学文字:开场的两句话,加上卡住时才出现的一句短提示。其余全靠图形、动画、音效与语音。三个最能说明问题的案例:

曹冲称象:从「点按钮」到「动手做」

第一版被判定「太死板、文字太多、说教」——复盘出的问题是把「关键抉择」做成了文字选择题,孩子始终在读,没有在做。重做后的改动对照:

维度 改前 改后
故事 4 幕 + 「下一幕」按钮 2 幕,点哪都行,每屏一句话
关键抉择 三选一的文字题 不做题:让玩家自己试出来
玩法 点石头按钮看数字涨 拖拽大象与石头,看水痕
结算 文字测验 3 题 石头过秤,数字累加出 3000
屏幕文字 每屏 1–2 句 + 题目 几乎没有,靠图形 / 动画 / 音效

「直接称 → 秤垮了」这第一步是设计的关键:问题是被玩家自己撞见的,不是被告知的。

后羿射日:零惩罚的教学

「不能全射下来」这个分寸感,如果写成文字提示就是说教;做成机制则是:射到只剩一个 → 大地回春;贪心把最后一个也射了 → 天黑,一句「要留一个太阳」,1.8 秒后太阳自己回来。孩子自己撞一次就懂了 —— 全程没有失败画面、没有扣分。

烽火戏诸侯:教训落在点火的人身上

信任是「点」出来的,不是「讲」出来的:点一次烽火,信任少一格(数据里的 decoyRounds = 3);第三次「他们连城门都没到」;第四次点火是真的 —— 一个人也没来。全篇没有一句说教文案,孩子是自己把信任点完的。出处还注明「后世学者多存疑」,教训落在信用上,不落在褒姒身上。

15.4 美术策略:几何绘制与「换资源不改代码」

阶段 0 的美术全部用 Phaser Graphics 绘制:零图片资源,先把玩法与学习闭环跑通。统一的画法约定(写进 cartoon.ts):

  • 厚描边(统一 THEME.outline 暖黑,不纯黑)+ 圆角 + 落地阴影;
  • 同一套角色风格:圆脸、腮红、三头身比例(如大象的四条粗腿、招风耳、象鼻路径);
  • 反馈动画标准化:popIn(出现)、squash(受重)、sparkleAt(成功)、createHand(引导)。

「换资源不改代码」是一条被结构保证的承诺:绘制代码全部收在 games/<id>/src/art.ts 的画法函数里(drawElephant、drawStage、drawPiece…),模板与工具箱只调用它们。将来切真素材时:

  1. 资源放进 games/<id>/public,story[].illustration 从 'none' 改为资源名(content:check 会提示确认资源就位);
  2. art.ts 里的绘制函数换成贴图调用 —— 模板、契约、外壳、测试全部不动。

配套的待办(方案中已列、实物未建):ASSETS-LICENSES.md 授权台账 —— 字体 / 音效 / 音乐 / BGM 逐个记录来源与许可证。项目文档把这条称为「会踩死人的坑,从第一天就做」;目前因为还没有引入外部资源,台账尚未创建,属于「进真素材时必须同步建立」的事项。

15.5 音频策略:合成音效与 TTS 旁白

  • 音效:六个(tap / correct / wrong / splash / unlock / complete)用 WebAudio 振荡器实时合成,零文件(第 9 章有配方表);另有 tone(freq, ms) 支持「进度听得见」(盘古撑天音调渐高);
  • 旁白:浏览器 TTS(桌面/网页)+ 原生 TTS(安卓),语速中文 0.9 / 英文 0.95;关键归位句(「左眼变成了太阳」)用语音而不是文字完成反馈;
  • 将来换真人配音:按 locale 取音频文件(zh-CN / en 各一套),改的只是 AudioBus.speak 的实现;方案给单文件定的预算是 3–8 秒切片、≤ 100 KB、.m4a + .ogg 双格式(iOS 认 m4a、安卓/桌面认 ogg)。

15.6 历史内容的准确性

儿童教育产品的信任建立在内容准确性上,代码层面有三条硬约束:

  1. source.book 与 source.quote 是 schema 必填 —— 每张典故卡都展示出处与原文引用,编不出出处的典故进不了合集;
  2. 三分法定性:kind 把「神话 / 传说 / 信史」分开。神农、大禹是传说时代的人物:算「信史」不诚实,算「神话」也不对 —— 所以内容模型加了第三个值,典故馆里多一枚徽章;
  3. 有争议的内容如实标注:烽火戏诸侯的出处注明「后世学者多存疑」,不把存疑故事当信史讲。

15.7 性能与体积预算(硬指标)

指标 预算 现状
外壳首屏 JS ≤ 150 KB gzip 约 83 KB(实测)
单个懒加载 chunk ≤ 450 KB gzip Phaser 约 363 KB(共享,进游戏才加载)
单游戏业务 chunk ≤ 120 KB gzip(方案目标) 1.2–6.1 KB(实测)
单图片 / 音频 ≤ 200 KB / ≤ 100 KB 阶段 0 无资源文件
单局时长 3–5 分钟 各典故 sessionSeconds 在 120–300 秒
中端安卓帧率 60fps;低端 ≥ 30fps 低端降级策略属阶段 2

体积的两条守卫随时在跑:check-size.mjs(构建产物)与逐帧重画的克制(不维护精灵列表、特效按需生成即销毁)。

15.8 明确「暂不做」的清单

技术方案里有一节专门写「Anti-scope」,列的都是主动不做的事:

账号系统 / 后端 API / 排行榜 / 多人联机 / 内购 / 广告 / 3D / 后台 CMS / 多语言(当时只做简繁 + 拼音)/ vue-router(3 个视图时 20 行 hash 路由够用)。

理由不是「不会做」,而是它们都会显著抬高成本与合规风险,且对「让孩子记住典故」这个核心指标几乎无贡献。反过来说,清单里每一项都留了触发条件:

  • 内容资产超过 20 个典故、确实需要非程序员编辑时,再引入 CMS;
  • 路由超过 5 条或需要嵌套路由时,再引入 vue-router;
  • 需要跨设备时,再换 ProgressStore 实现做云存档。

对儿童产品而言,少做一个功能往往比多做一个功能更需要勇气。

15.9 小结

  • 儿童向规范不是口号,逐条都有落点或明确的「待做」标记;
  • 记忆工程五层各有实现位置,keyMoment / quiz.kind / 复习调度这些数据结构是「为什么」的答案;
  • 「少写字、多动手」由三个案例支撑:曹冲的重做、后羿的零惩罚、烽火的信用机制;
  • 美术(几何绘制)与音频(合成 + TTS)两条都是「阶段 0 零资源、换资源不改代码」的策略;
  • 历史准确性三条硬约束(出处、三分法、存疑标注)是教育产品的底线。

下一章收尾:把散落在各章的所有踩坑记录集中起来,并回答常见问题。