节拍前夜开发周报 — 2026 第 12 周(3/16 - 3/22)

03/2633 浏览综合 包含 AI 合成内容
  节拍前夜 · 第 48-57 天 · v1.16.0 → v1.24.5
一句话总结
从模块化收尾到 DWP 边下边玩、i18n 全覆盖、DrawingMachine v4.0 视觉大升级、练习模式 13 个 bug 修复——这周几乎把每个系统都摸了一遍。
————本周成果————
新功能
DWP 边下边玩系统 — 第一次尝试失败(Boot 黑屏、占位纹理不可控),分析根因后换方案重做成功。LoadingScreen 改为 UI Widget + NanoVG 渲染,cache:DownloadResources\(\)
主动拉取全部资源,下载完才切屏。紫色渐变背景 + 浮动音符粒子 + 发光进度条
TapTap
i18n 国际化系统 — 从零到 274 个 key 全覆盖。搭建 T\(\&\#34;key\&\#34;\)
翻译函数 + zh.json,分四阶段覆盖:基础设施→共享词汇→9 个 UI 屏幕→4 个战斗模块→教学对话。zh.json 移到 docs/ 方便开发者直接润色文案
DrawingMachine v4.0 视觉大升级 — 渲染管线从 10 层扩展到 16 层(对角光扫、四角辉光、暗角、扫描线、边缘柔化、对角渐变),55+ 智能预设,配色方案系统。UI 从\"能看\"升级到\"有质感\"
RhythmTrackV3 双向音波律动条 — 判定线居中,玩家/敌人音波从两侧向中心夹击,五线谱流动引导线,最终转正为默认律动条
三区战斗信息系统 — 判定线文字爆炸(BattleTextFX)+ 双侧报幕(BattleSideAnnounce)+ 中间状态栏(BattleStatusBar),替代旧的单一信息流
32 个教师语音文件 — teacher_v01 到 v32,覆盖练习模式完整引导流程
PC 端键位提示 — 技能按钮左侧显示 [A] [空格] 等可读键位名
新 UI 纹理测试系统 — DrawingMachine 九宫格/叠色/纹理面板 API + UITextureTestModal 预览界面
UMC D.styled 改造 — 12 个条目从手写参数改成 D.styled() 调用,覆盖存档弹窗升级为三层组合材质 + 音符花纹边框
Bug 修复
DWP 资源列表 UTF-8 编码损坏(BUG-54) — 26 个中文文件名以 Lua 转义序列存储,其中 24 个 UTF-8 字节损坏,导致下载失败→1x1 占位符→立绘被压扁成细线。全量清理 66 个转义序列
PerfMonitor 跨屏切换 WASM 崩溃(BUG-43) — 旧 root 递归 Destroy 连带销毁 hudRoot_,Detach-before-Destroy 修复
UMC.get 合并冲突(BUG-55) — 浅合并残留 preset 字段导致 D.styled 的 dmParams 不生效
ApplyDMBackground scissor 裁剪花纹边框(BUG-56) — 向外延伸的九宫格装饰被 scissor 裁掉,动态扩大裁剪区域
跟拍按钮点击区域偏移 — 经历 5 轮修复:Panel→透明 Button→GetAbsoluteLayout→屏幕百分比(被骂)→最终从布局参数手算 + 圆形碰撞检测
语音被截断 — Sound.length 对 OGG 格式全部返回 2.0s,改用 ffprobe 实测时长硬编码
PracticeMode 9 个 bug — overflow 裁剪点击区域、蓄力槽双条件、StopSoundType nil 崩溃、语音排队未接入 Update、charge 键 fallback、变色方向搞反、语音间距不够、onBeatCount 计数错误、ready 阈值不对
五线谱不波动 — rhythmTrack:OnUpdate 调用缺失,一行代码的事
事件扣血致死后存档未清除 — 死亡判定后加存档清理
TitleScreen 按钮宽度坍塌 — SetStyle 隐式重算 width 时 text=\"\" 导致宽度被压到 64px
架构重构
代码模块化拆分(第二波) — DrawingMachine(-624行)、EventScreen(-553行)、TitleScreen(-187行)、MapScreen(-153行),采用\"纯提取\"模式(无状态耦合),与第一波的\"注入+代理\"互补
素材体积优化 — 清理 11 对 jpg/png 重复文件 + 3 个未引用大文件,assets/image/ 从 161MB 降至 109MB(-52MB)
其他
developer-care 自动触发三层强化 — 项目级 CLAUDE.md + SOP 嵌入 + 精华 AI 工作流
本周数据
TapTap
本周踩的坑
  1. DWP 的本质不是"下载时机"开关 — preload_groups: [] 改变的是引擎级资源分类逻辑,不属于 preload group 的资源在 GetResource() 时直接返回占位纹理,平台无关。2D 图片密集型游戏不能让玩家看到白色占位,必须在 LoadingScreen 里下完再放行。
  2. Sound.length 对 OGG 不可信 — 引擎接口全部返回 2.0s,不管实际多长。以后音频时长一律 ffprobe 量完硬编码。
  3. UI 框架坐标链在多层嵌套下不可靠 — 与其反复调试 findWidgetAt() 的坐标转换,不如从已知布局参数直接手算。v4 被我骂"太敷衍"那次印象深刻。
本周心得
最有成就感的是 DWP 的失败→分析→重做→成功过程——第一次失败后认真分析了根因(引擎级资源分类逻辑),第二次换了完全不同的架构(UI Widget 内渲染),三个小时四轮迭代从概念到成品。
i18n 从零到全覆盖也很爽,一天之内 274 个 key。开发者当天就上手润色文案,改文案不用翻代码了正是 i18n 的意义。
最大的教训来自 Git 同步方案的讨论——AI 两次凭假设否定,我坚持实测才发现完全可行。技术判断不能靠直觉,先测试再下结论。
节拍前夜 · 第 12 周周报
*开发工具:TapTap Maker + **Tarara*
2