Files
NumberSwipe_New/wechat-campaign-200-r2/OPTIMIZATION.md
T

177 lines
19 KiB
Markdown
Raw 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.
## 2026-10-23:过关音乐跨关续播与iOS切关排查
版本2026-10-23-jingle-through-next,基于dc83712(已发布A3,包含6abbc37与8f2263b)。独立包:../releases/NumberSwipe-main-A3过关音乐跨关续播-20261023.zip。保留旧发布包和解压目录,不上传、不推送。
- 用户真机对照:iOS中完成音/彩带播放期间立即点击下一关会卡一下;关闭音效后不卡。旧代码start→feedback.reset→audio.stop会向正在播放的完成音发出stop,并立刻finishComplete→BGM恢复。实际旧/新游戏包调用链对照见qa/jingle-next-trace-20261023.json,属于原生调用指令取证,不是iOS耗时测量。
- 按用户新要求,切关只取消旧关视觉、震动和过期落格音;保留正在播的3秒过关短音乐,既不stop、不改src,也不重播。BGM继续保持基础音量25%,由这首短音乐自身的自然结束回调恢复正常。
- 完成音占用第四路期间,新关卡移动、节点、指路和按钮音效借用原有三路普通池,保持四路音效上限,不抢占完成音;保持短音乐音量0.6375、基础BGM音量0.119及音高规则。
- 普通换关和重开保留正在播放的完成音。关闭音效、后台/音频中断、播放失败仍按原规则取消;再次完成新关卡维持完成反馈优先级。旧结束回调不能把新一轮完成音的BGM提前恢复。
- 检查包含117项模块测试、200关触摸回归及旧/新调用链对照。针对用例覆盖真实下一关按钮、规则/UI/节点不抢占、自然结束恢复、后台与静音、连续完成和异常分支。日志见qa/jingle-next-check-20261023.txt。
- 本版已移除“点下一关时停止正在播的完成音”的原生调用,但尚无本机iOS性能追踪;不能将浏览器或测试替身的结果称为真机卡顿已消除。请用新包真机复测这一明确时机。
## 2026-10-23:A3明亮软糖指路(包含6abbc37)
版本2026-10-23-soft-ribbon-a3-bright,以6abbc37为基础,包含iOS通关早点击负载优化、奇偶节点彩带、选关/规则/设置统一音效、设置冒号和“乐”字字重修复。独立包:../releases/NumberSwipe-main-A3明亮软糖指路-20261023.zip。旧包、旧解压目录不变;不上传、不推送。
- 按用户A3交接接入Canvas程序化软糖带,不使用PNG。保留0.235带宽比例(7–26逻辑像素)、圆润接缝、0.39pitch端点消隐;移除旧箭头、细白芯、双描边和目标圈。
- 原参数对照保存在docs/design/bright-classroom/concepts/hint-soft-ribbon-a3.tokens.json;有效提亮参数在同目录hint-soft-ribbon-a3-bright.tokens.json及正式tokens.json的hintSoftRibbon命名空间。杏橙主体提亮、柔冠由低透明暖白增至0.24、棕影由0.15降至0.09;尺寸、速度和呼吸周期保持设计值。
- 一段一个宽亮斑按真实弧长流动(60px/s,最短周期1800ms)。玩家落格不重置分段时钟;只过滤已走边,使用独立带面画布source-atop,帧帧从干净静态带面开始。
- 目标取真实单元轮廓,材质/桥→目标柔光→实际数字/规则符号/墙门依次合成;目标缓慢呼吸(2200ms,0.65–1),不缩放、不复制或写死目标数字。玩家已走格及外晕在软糖和目标光两层都排除。
- 弧长、合法圆角、静态带面和目标材质/符号层缓存;支持矩形、异形、孔洞和六边形。完成段、重开、换关和后台释放旧绘制状态;不支持离屏合成时保留静态带面。
- 新增6项A3模块测试,并更新旧箭头视觉断言。200关指路填色像素一致;完整测试/200关触摸记录见qa/a3-check-20261023.txt。浏览器尺寸与样张验收入口为qa/bright-classroom.html的“A3尺寸与动画验收”。微信/iOS/Android真机帧率与混合效果仍需上传后复测。
## 2026-10-23:iOS通关早点击与界面反馈修复
版本:2026-10-23-ios-clear-ui-fix,基于0cefce4。独立新包:../releases/NumberSwipe-main-iOS通关切换与界面反馈修复-20261023.zip;旧包及旧包解压目录保持原样,不上传微信,不推送远端。
- 用户真机复现条件为iOS微信小游戏,彩带播放后立即点击下一关会卡顿,稍后点击正常。上版通关时以“clear”新键重启下一关材质预热,与动画争抢时间。本版删除重复启动,通关停止预热;点击下一关先取消旧动画帧和预热,再执行切换。
- 通关静态背景在落格动画收束后保存一次,庆祝帧只合成背景和彩带,不反复绘制全部UI。设置、规则、尺寸变化、后台及换关会使背景失效;不等待2.6秒庆祝结束即可切换。
- 奇偶节点的有效落格现在开启原有局部彩带,方向节点仍保留音效、缩放与振动;最后一格只执行完成反馈,两组节点彩带上限不变。
- 游戏内选关、规则、设置和返回游戏统一使用现有audio/ui.wav。通关最初120ms内也允许按钮音效;不改变静音偏好。
- 设置统一为音乐:开/关、音效:开/关、振动:开/关。“乐”在旧Sans字体子集中缺失,已补齐500/600/700三个实际字重并保留原字库覆盖;数字和标题字形资源保持原样。
- 验收:104项模块测试;200关触摸回归;新增通关后0/40/110/300/3000ms切关及演出背景复用、统一按钮音效和字体覆盖测试。浏览器真实Canvas20组早点击切关记录见qa/ios-clear-browser-20261023.txt。
- iOS真机待复测。浏览器不替代真机性能验收;交专门打包上传会话上传后,重点验证连续过关立即切换、静音/后台恢复和不同密度关卡。
## 2026-10-23:回退音阶与流畅切关
版本:2026-10-23-descending-undo-fast-next;基于90d83b3的BGMA连续播放与节点缩放版。仅本地开发与打包,不上传微信,不开启开发者工具服务端口,不推送远端。
- 手势回退与撤销键按被撤销步号,使用前进同音色音阶逆序播放。例如7步回退播放7、6、5、4、3、2、1,最后一步清空仍发1;重开保持原音效。快速回退与前进共用三路声音池,过密声音只保留最新音高,不补播积压。
- 过关短音乐只调整播放增益:0.75→0.6375,降低15%。普通移动、节点、重开、BGM基础音量及通关压低/恢复逻辑不改;原WAV资源不变。
- 点击下一关不再现场求解:构建时准备并验证200关完整路线,源关卡哈希记录在src/prepared-routes.json。玩家仍按原公开规则自行操作,提示机制不变。移除start/showPlay的重复棋盘绘制。
- 下一关空棋盘的材质按空闲帧逐格预热,拖动暂停、超时取消;换关、选关、后台和尺寸变化终止旧任务。预热不产生声音、振动、进度或玩家反馈,缓存仍使用原有内存上限。
- 浏览器真实Canvas抽测第91/163/192关:62.3/130.5/152.6ms降为13.1/8.4/7.8ms;数据见qa/next-transition-browser-20261023.json。此为同机浏览器数据,不视为真机帧率验收。
- 验收:101项模块测试、200关触摸回归;原始关卡与上游快照不变,旧发布包保留。手势/按钮降序音阶、音量、BGM不中断、预热生命周期与单次绘制均有回归。
包:../releases/NumberSwipe-main-回退音阶与流畅切关-20261023.zip。交专门打包上传会话处理上传。
## 2026-10-23:居中标题与指定WAV音乐
版本:2026-10-23-centered-title-selected-wav。使用用户交付的NumberSwipe-BGM-LOOP-v1-20261023音频;旧版发布包保留。
- 标题保持原画并水平居中;设置移到总进度、关卡范围标签同一行。小屏仍为每页15关,按钮无重叠。
- 菜单30秒循环;每次进入关卡从67.2秒A、约65.455秒B中随机选一首循环。同关重绘、移动、静音恢复及后台恢复不重选,切关再随机。
- 通关短句替换原通关音,使用交付的3秒WAV,仅播放一次;通关之前先停止BGM,下一关恢复循环。短句沿用音效开关及实际起播同步,BGM沿用音乐开关,无动态压低或叠加。
- 原始44.1kHz/16bit立体声WAV原件保留于.audio-sources并记录哈希;运行BGM适配为22.05kHz/16bit立体声WAV,通关短句为同采样率单声道,完整时长与乐句保留。没有改用MP3或OGG。npm构建校验现成WAV,不依赖ffmpeg。
- 长BGM放入music分包,异步加载期间操作不阻塞;回调只播放当前场景,静音、后台、通关及加载失败均不会迟到播放。原始来源目录已从根工程与子工程上传配置中排除;music/CREDITS.md保留音源署名。
- 验收:89项模块测试、200关触摸回归;375及320×568浏览器布局,随机选择、分包取消、前后台与音效同步均有回归。微信真机音量、循环边界听感与分包下载仍需预览验收。
包:../releases/NumberSwipe-main-居中标题与指定WAV音乐-20261023.zip。工程仍为wechat-campaign-200-r2。
## 2026-10-23:参考图标题还原
版本:2026-10-23-reference-title-artwork。基于最新温暖无节拍BGM主版,本轮没有修改音乐、音效、震动、规则、存档或关卡。
- 移除普通字体描边模拟;使用参考图经imagegen提取的独立透明标题美术资源images/title-reference.png,保留定制橙紫字形、圆润奶油贴纸边、倒角高光及立体厚度。资源为2132×737,等比绘制,首加载完成自动刷新。
- 选关顶部按真实图片比例预留空间,小屏缩小网格间距,继续保持每页3×5关、触摸目标至少44px,进度与范围标签不被遮挡。
- 图片资源随发布包保存;浏览器预览与模拟宿主支持原生图片加载。
- 验收:83项模块测试、200关模拟触摸;375宽及320×568浏览器画面核对。最新温暖BGM资源哈希不变。真机显示仍需微信预览确认。
包:../releases/NumberSwipe-main-参考图标题还原版-20261023.zip,保留之前版本。
## 2026-10-23:温暖无节拍关卡BGM试听版
版本:2026-10-23-warm-ambient-bgm。用户选择试用温暖、无节拍、弱旋律方向;本轮仅替换关卡音乐,选关音乐保持原文件哈希。
- 原创32秒循环:低中音区柔和和声缓慢交叠,没有鼓点、规律敲击或突出旋律;采用周期波形与平滑交叉渐变,避免循环接缝。
- PCM均方根约0.035,峰值小于0.17,关卡播放音量0.14;选关音量仍为0.16。保留音乐/音效/振动独立开关及后台、中断恢复。
- 节点确认音、通关和弦、缩放、触觉、存档、选关标题及200关规则保留。之前节点跟手与立体标题发布包保留。
- 验收:80项模块测试、200关触摸回归;生成资源的接缝、包络突变、音量及开关恢复检查。实际听感与真机扬声器/耳机效果需用户试听。
试听资源:music/play.wav。发布包:../releases/NumberSwipe-main-温暖无节拍BGM试听版-20261023.zip。
## 2026-10-23:节点反馈与立体标题
版本:2026-10-23-responsive-nodes-sticker-header。开发分支:codex/node-feedback-responsive。以当前正式主工程为基线;没有从历史副本覆盖文件。
- 修复只有固定数字触发checkpoint的问题:合法到达数字、奇偶、方向节点均使用独立checkpoint-N确认音及中震;最后一格只触发完成和弦。错误不冒充节点,也不参照答案判断。
- 所有普通落格、回退落点(撤销最后一步时为被撤销格)、错误局部提示改为90ms小回弹,峰值1.025;特殊节点90ms峰值1.065。只缩放块体表面,文字锚点、规则线和命中区域保持稳定。
- 回退和撤销加入轻震。经用户选择保留轻/中强度,把普通震动最短间隔70ms改为61ms,连续触发密度约增14.8%;不宣称单次物理强度提高15%。短震降级、关闭开关、预览禁震及后台取消继续有效。
- 原数字节点彩带的触发、范围、最多两组及1500ms时长保留。新增奇偶/方向节点使用较大缩放和确认音,不额外扩大彩带。
- 选关标题按参考图使用橙紫双色、奶油描边和叠层立体处理;进度奶油标签、关卡范围橙色标签。保持每页15关及320×568安全区域。
- 选关与关卡BGM正常保留,音乐资源、音量及独立开关本轮没有更换;音效、震动和回退不停止音乐。
验证:78项模块测试通过(含200关每一步特殊节点音效断言),200关模拟触摸回归通过;375宽、320×568浏览器排版通过。200关提示填色像素复核记录见qa。真机音效起播、振动手感与高密度帧率仍待iPhone和Android验收。
BGM待选方向:①温暖无节拍氛围,低音区软垫与缓慢和声、弱旋律(优先推荐);②稀疏毛毡钢琴,少量低中音、长留白;③柔和木质环境音,去固定节拍、极少敲击,保留教具室气质。当前16秒循环暂留,未擅自替换。
包:../releases/NumberSwipe-main-节点跟手与立体标题-20261023.zip。之前主版本包保留。
# 历史开发记录
2026-10-23 本版本已提升为正式 main。以下独立实验版和不替换主版的说明仅描述提升前历史;当前入口以 README.md 和 release-info.json 为准。
## 本轮更新:音乐与流动指路(2026-10-22)
- 每页15关,3列×5行(末页5关左对齐);完成数字后绘制圆润勾。320×568仍保持44px以上格子。
- 选关按钮与指路启用分别播放新短音;选关、游戏各有一首原创16秒稀疏木琴循环,低音量独立播放器,不占用四路反馈池。
- 游戏右上角统一进入设置,只有音乐、音效、振动三个独立存储开关;旧减少动态存储不再限制本版表现。
- 数字节点经实际操作测试确认:小幅回弹、中震、checkpoint-N音;终点只用complete和弦,无节点叠加。方向格步号缩小保留线路。
- 指路箭头沿完整分段保留位置;前进一步旧箭头180ms冲向终点,新箭头65px/s出发;不按剩余路线长度重置相位。
- 后台、音频中断停止音乐和反馈;恢复后按场景播放。原版声音资源及上一版包保留。
验证:72项模块测试、200关模拟触摸通过;浏览器375宽与320×568排版、200/200关提示前后及撤销重画的玩家填色像素检查通过。iPhone/Android真机音量、触觉及帧率待验收。
当前独立包:`NumberSwipe-campaign-200-r2-分层反馈二版-音乐与流动指路-20261022.zip`。主版与历史包保持原样。
# 分层反馈独立版验收记录(2026-10-22)
当前主版本保持不变。本目录是独立开发副本,版本标记为 `experimental-layered-feedback`,基于 `2026-10-22-resume-chapter-lessons`。不回写 Variants 主目录,也不覆盖其他工作树及历史发布包。
## 使用与验证
解压独立包后导入微信开发者工具,重新编译并生成预览二维码。源代码目录运行:
```powershell
node build.mjs
node --test feedback.test.mjs resume-select.test.mjs bright-classroom.test.mjs hints.test.mjs lessons.test.mjs audio-copy.test.mjs
node smoke.mjs
./package.ps1
```
浏览器验收页:
```powershell
$env:NUMBERSWIPE_QA_PORT='17861'
node qa/serve.mjs
```
打开 `http://127.0.0.1:17861/qa/bright-classroom.html`,使用“反馈对照”选择原版/强化版。此页不发起触觉;原音效保存在 `audio-original/`,哈希记录在 `qa/original-audio-sha256.json`。正式设置只增加“振动”开关,没有强度滑杆。
## 实现与参数
| 内容 | 实现 | 验收依据 |
| --- | --- | --- |
| 实际操作事件 | `layered-feedback-build.mjs` 在追加、回退、错误及完成处注入事件;每次原生触摸回调的插值批次统一提交声音和最高级触觉 | 高速单次移动跨三块得到 move、move、complete;序号与步号递增 |
| 数字节点 | 固定数字大于1、步号匹配且现有规则无冲突;终点只发 complete | 合法但偏离唯一解的移动仍按普通事件处理,不用答案判断反馈 |
| 回退确认 | `backtrack.mjs` 对原命中多边形并集的外边界计算距离,内缩 `min(3,0.06u)`;剔除异形内部拼接边 | 方形、凹口、六边与真实拖动测试;起手和前进命中未扩大,按钮撤销即时 |
| 普通落格 | 120ms,最低缩放0.985;新桥100ms展开;数字、通道、墙门、命中轮廓不缩放 | `landingScale` 边界测试和原有200关几何回归 |
| 数字节点 | 回弹最高1.035,260ms结束;原局部彩带最多两组;回退节点取消其彩带 | 多个节点先到达、后绘制的测试;通关清空未结束节点 |
| 完成 | 即时完成章;庆祝沿用原2.6秒规模;实际 onPlay 在120ms内作为起点,否则锁定逻辑起点 | 迟到回调不重启;音频中断、后台、换关取消旧演出 |
| 音频 | 四路:三路移动、一路节点/确认;普通音超过20次/秒合并到最新步号;通关停掉残留音 | 最新步号、四路停止、静音取消、回调代际测试 |
| 触觉 | 独立键 `number-swipe:haptics:v1`,默认开;普通轻震70ms限频;节点中震替代轻震;完成中震后90ms轻震 | 关闭、预览、旧任务、迟到失败回调、短震降级测试;从不调用长震 |
| 选关 | 始终每行3关,每章10关;通关绿色、当前紫色 | 四档手机尺寸与三列断言;截图 `qa/layered-feedback-three-columns.png` |
集中参数在 `src/feedback-params.mjs`。反馈调度和生命周期在 `src/feedback.mjs`,触觉适配在 `src/haptics.mjs`。四份上游快照未修改;所有规则、关卡、顺序、续玩存档、提示和手动下一关继续保留。减少动态关闭块体缩放和彩带运动,音效和振动分别控制。
重开、换关、选关退出、后台和音频中断会取消旧音频、触觉延迟任务与表现事件。硬件不支持强度时只降级为一次短震;不可用静默跳过。一次原生触摸回调产生多个插值事件时,视觉事件逐个保留,音频与触觉采用最高优先级,不补播过期的低级触觉。
## 证据与结果
| 证据 | 结论 | 复现入口 |
| --- | --- | --- |
| 67项模块测试通过 | 事件优先级、回退确认、触觉代际、原音效哈希、音画同步与已有模块回归通过 | 上述 `node --test` 命令 |
| 200关模拟触摸通过 | 关卡唯一解、合法移动、撤销重开、存档与分段指路未破坏 | `node smoke.mjs` / `validation.json` |
| 浏览器200关稳定画面填色采样通过 | 开启提示和撤销重画后,玩家填色保持一致 | `qa/hints.html` |
| 强化移动音第1/36步 RMS 约1503/555 | 高步号能量降低,36步逐半音关系仍在 | `feedback.test.mjs`、`audio-copy.test.mjs` |
| 主版源文件基线逐项哈希一致 | 独立开发没有改写当前主版 | 工作区同级 `wechat-campaign-200-r2-layered-feedback-baseline.json` |
## 真机验收:待完成
| 设备 | 状态 | 仍需确认 |
| --- | --- | --- |
| iPhone | 未进行 | 轻/中震差别、90ms组合舒适度、高步号音色、密集关跟手、实际音画同步与帧率 |
| Android | 未进行 | 强度不支持时的短震降级、连续震动舒适度、同上音效与性能项目 |
浏览器和模拟器结果不作为真机通过。本轮没有可用的iPhone/Android设备会话,没有上传或发布小游戏。