Files
SpineWallpaper/.scratch/wallpaper-optimization/issues/03-init-and-robustness.md
T
Shuery 8ad177c822 docs: 优化工作台的 spec 与 6 个实施 issue(.scratch/wallpaper-optimization/)
按本仓 issue-tracker 约定落盘:spec.md 记决策与验收,issues/NN-*.md 一步一票。
01 已完成,02-06 待做。
2026-09-19 19:27:47 +08:00

21 lines
1.3 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.
# 03 健壮性:初始化状态机、死代码、用户级覆盖语义
Status: ready-for-agent
## 问题
1. **初始化竞态(已实证)**:`SpineController.changeConfig()` 整个函数体都在 `if (this.player)` 里,
包括状态赋值。WE 可能在 `window.load` 之前就下发用户属性,此时预设被静默丢弃:
同一份代码、同一份属性,`load` 之后下发得到 `animation`(kv37,正确),
`DOMContentLoaded` 时下发得到 `idle`(xilian)——背景与音乐已切到 kv37、立绘还是昔涟。
修法:**状态先写、应用后置**;`changeX()` 无条件更新状态,只在有 `player` 时应用,加载完成时统一应用一次。
2. `index.js` 里有一段重复的 `window.wallpaperRegisterListener`(该 API 在本机 WE 不存在),是死代码。
3. `SpineController.adjustCanvas()` 与播放器自身的 resize 重复,且用 `getBoundingClientRect()` 写 `canvas.width` 而未乘 DPR。
4. 用户级覆盖语义:用户自定义了音源/音量后,切换预设不得把它清回预设默认值。
## 验收
- 把"属性在 `DOMContentLoaded` 下发"这一路作为回归断言:玩家实际使用的动画必须与所选预设一致。
- 死代码与重复 resize 移除后,对拍仍无回归。
- 同一份预设往返切换 20 次,用户自定义音源/音量保持不变。