Files
NumberSwipe_New/docs/2026-10-21_程序化美术-明亮教具室实现验收-report.md

84 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数字一笔200关 · 明亮教具室实现与验证
日期:2026-10-21。状态:已接入、已构建、自动回归与浏览器验证通过;微信手机验收待进行。
## 直接体验
- 源码与微信工程:[wechat-campaign-200-r2](../wechat-campaign-200-r2/README.md)。在微信开发者工具导入该目录,重新编译并生成新的手机预览。
- 独立导入包:[NumberSwipe-campaign-200-r2-明亮教具室-20261021.zip](../releases/NumberSwipe-campaign-200-r2-明亮教具室-20261021.zip)。解压后导入;不需要构建npm。
- 浏览器试玩:在工程目录执行 `node qa/serve.mjs`,打开 [明亮教具室试玩](http://127.0.0.1:17859/qa/bright-classroom.html)。提供200关、五种屏幕尺寸和真实关卡样张选择;页面上的自动画路按钮属于验收工具,不进入游戏包。
导入包 SHA-256:`53945F4558F7DD3EA4904B9AE2373E88288B728D16FC359504631AF550D1F251`。
## 已实现的美术
| 范围 | 当前表现 |
|---|---|
| 整体与UI | 暖黄背景、低对比静态几何纹样、奶油舞台、圆角面板、按钮下沿、紫色指路主按钮、程序路径图标 |
| 棋盘 | 矩形/异形完整轮廓、多环与内孔支持、缩缝圆角、短底沿、接触投影、左上亮边与微渐变 |
| 路径 | 普通块整面紫色;真实共边桥接;数字单位不随大块面积放大;当前位置短角标 |
| 规则 | 固定条件框、奇偶副标、可反向通道、类别形状、连续黑黄墙带、开/关/已过门形态 |
| 组合状态 | 蓝橙类别面全程保留;错误采用局部标记与反馈;六边条件框和角标单独适配 |
| 指路 | 独立透明层;按真实入口和块内可通行区域引导;避让数字与规则;擦除已走块的完整面和底沿 |
| 教学与完成 | 教学复用新renderer,隔离玩家状态;门160ms短切换、通关320ms短扫光;完成后原位显示下一关 |
| 字体与偏好 | Nunito800数字、Noto Sans SC500/600/700中文子集;本地加载、许可及哈希记录;减少动态持久化 |
| 调度 | 静态选关、无活动动效的思考状态与减少动态下静态提示停止RAF;前后台正确停止和恢复 |
关卡、顺序、规则、存档key、半音音效、抬手续画、逐格回退、撤销、重开、分段提示与手动下一关保持原有行为。当前起始页继续使用原有选关流程,没有增加独立首页或扩展商业系统。未制作额外主题、原创标题轮廓和通关粒子。
运行包中没有PNG、JPG、WebP、SVG图片美术;全部形状由Canvas绘制。`qa/`下截图仅是验收证据,打包时排除。字体共369700字节,附两份OFL与字集/SHA-256 manifest;构建工具、原始完整字体不进入运行包。
## 源码接入
| 文件 | 责任 |
|---|---|
| `src/bright-classroom/theme.mjs` | 直接导入设计令牌、字体加载、文字与面板基础绘制 |
| `src/bright-classroom/geometry.mjs` | 全闭环轮廓、内缩、圆角、布局、稳定锚点、合并共边与块内引导 |
| `src/bright-classroom/board-renderer.mjs` | 材质、桥、标注、类别、墙门、动效、表现缓存与提示几何 |
| `src/bright-classroom/ui.mjs` | 纹样、图标、按钮与舞台 |
| `bright-classroom-build.mjs` | 检查过的上游绘制接缝替换,保留原业务回写与教学状态恢复 |
| `src/main.mjs`、`src/platform.mjs` | 宿主UI、输入、设置、脏状态调度、Canvas合成与诊断 |
| `src/hints.mjs` | 保留分段控制器,新增几何引导与安全遮罩绘制 |
| `fonts/`、`build-fonts.py` | 改名的静态字体子集、许可、manifest及离线重建脚本 |
上游四份来源快照的内容和哈希不变,`source-manifest.json`只更新适配版本说明。`build.mjs`已构建新 `game.js`;独立包只含三个入口/配置文件、41个音频和7个字体及许可/manifest文件。
## 验证结果
以下命令在 `wechat-campaign-200-r2` 执行,均已通过:
```powershell
node build.mjs
node --test bright-classroom.test.mjs hints.test.mjs lessons.test.mjs audio-copy.test.mjs
node smoke.mjs
```
| 检查 | 结果与证据 |
|---|---|
| 模块测试 | 29/29通过:既有23项+6项新美术检查,包括内孔、200关四种尺寸几何、异形引导不穿洞、类别身份、字体哈希与构建接缝 |
| 微信模拟整包 | 200/200唯一解与触摸通关;撤销/重开/提示;教学状态隔离;四种手机尺寸;前后台;存档/音效恢复。记录见 `validation.json` |
| 新调度与偏好 | 字体本地装载调用、减少动态存档恢复、静态页与静态提示无RAF积压,加入 `smoke.mjs` |
| 浏览器实际像素 | 200/200关的已走格采样像素在提示前后及撤销重画后相同。使用随包字体,入口 `qa/hints.html` |
| 人工浏览器检查 | 基础大块、双色奇偶、六边墙、320×568密集36块;据此修正六边类别标记和焦点角标位置 |
| 色对与内容审计 | 仓库根目录 `node docs/design/bright-classroom/audit-design.mjs` 通过规定色对检查,关卡统计仍为20章200关 |
| 运行包资源 | ZIP条目检查无图片美术,无源码、QA截图、字体构建工具和完整源字体 |
浏览器截图:[大块关](../wechat-campaign-200-r2/qa/bright-classroom-basic.png)、[六边关](../wechat-campaign-200-r2/qa/bright-classroom-hex.png)。截图来自实际游戏包的浏览器宿主,不是概念效果图或微信真机截图。
## 微信手机验收
在开发者工具导入新目录或ZIP解压目录,重新编译并生成预览;至少检查基础大块、双色通道、门、六边和r2-163密集盘。关注字体是否实际加载、滑动与回退命中、墙门和两位数、提示遮罩、后台恢复、音效及持续操作耗时。
浏览器验证与模拟触摸不能证明手机的帧率、内存、音色和字体API兼容性。当前没有60fps或微信手机显示已验收的结论;字体失败时有稳定系统回退,并可在 `GameGlobal.numberSwipeR2.snapshot().fonts` 查看加载诊断。
## Evidence → Finding → Path
| 证据 | 结论 | 执行路径 |
|---|---|---|
| 原美术报告、tokens.json、真实200关及来源快照 | 风格应服从真实几何与规则,不能只替换颜色 | 轮廓与共边→材质→规则标注→UI与教学 |
| 新专项测试、`validation.json`、浏览器200关像素检查 | 新renderer保持既有玩法、类别身份和提示填色不变量 | 实际game.js→模拟微信与浏览器→独立运行包 |
| 真实浏览器样张与320宽密集关 | 六边角落与密集数字需独立排版 | 六边标记修正→复查样张→保留截图 |
| 未执行微信手机预览 | 平台显示与性能仍需设备证据 | 新包导入→手机预览→记录设备与实测结果 |
字体上游:[Nunito](https://github.com/google/fonts/tree/main/ofl/nunito)、[Noto Sans SC](https://github.com/google/fonts/tree/main/ofl/notosanssc)。实际使用的源文件哈希、输出字重与子集哈希记录于 `fonts/manifest.json`,相应许可随包交付。