WebGAL icon indicating copy to clipboard operation
WebGAL copied to clipboard

Fix missing enter animation

Open HardyNLee opened this issue 8 months ago • 3 comments

介绍

修复 当资源未及时加载时, 入场动画不能正常播放 的问题

主要更改

  • addFigure addLive2dFigure addSpineFigure addBg addVideoBg addSpineBg 新增 onLoaded: () => void 参数
  • 移除不必要的 setTimeout

测试

请自行在支持 Live2d 的引擎上, 在场景里加载多个 live2d 模型, 最好 next 成一起, 第一次出场时能看到所有 figure 能正常播放入场动画

HardyNLee avatar Jun 01 '25 09:06 HardyNLee

考虑一种情况,可能 onLoad 触发时,由于快进或者某种原因,立绘已经退出,或者此时动画由于用户交互,应当被推到“终态”了。再加上演出管理系统会自动在指定的时间调用 stopFunction 来使演出进入终态,这里的处理可能会导致动画和立绘效果混乱。

MakinoharaShoko avatar Jun 01 '25 12:06 MakinoharaShoko

考虑一种情况,可能 onLoad 触发时,由于快进或者某种原因,立绘已经退出,或者此时动画由于用户交互,应当被推到“终态”了。再加上演出管理系统会自动在指定的时间调用 stopFunction 来使演出进入终态,这里的处理可能会导致动画和立绘效果混乱。

在最新的提交中, 加了一个简单的 ignoreOnLoaded 布尔值来防止这种情况, 现在在未加载时, 退场, setTransform 和 setAnimation 均能阻止 onLoaded 执行

HardyNLee avatar Jun 03 '25 05:06 HardyNLee

动画不能被延迟注册,但是我们可以换一种思路:注册动画,并等到立绘被确实添加后再开始播放。这需要将所有的 addFigure 之类的函数都转为异步函数。先注册动画,拿到动画控制对象,然后等待立绘确实添加后开始播放。 由于进入类演出没有定时器和 stopFunction,所以完成以上变更应当可以实现目的。原本使用回调的方案太过复杂,建议移除。并且,如果立绘在 setup 阶段不存在,异步函数返回失败就可以了,不需要再在 WebGALPixiContainer 上面添加字段。

MakinoharaShoko avatar Jun 03 '25 11:06 MakinoharaShoko

该 PR 的解决方案增加了过多复杂性且已不适应当前的代码,因此将被关闭。如果有新的实现,请新开 PR。

MakinoharaShoko avatar Jul 05 '25 01:07 MakinoharaShoko