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