考虑以下代码:
setTransform:{"position":{"x":-1000}} -duration=5000 -next -target=figure01;
setTransform:{"position":{"y":0}} -duration=3000 -parallel -target=figure01;
setTransform:{"position":{"x":1000}} -duration=3000 -next -target=figure01;
setTransform:{"position":{"y":-720}} -duration=5000 -parallel -target=figure01;
让我们假设初始运行状态是 {"x":1000,"y":720} 的情况。
其中,1,2 两行代码,如果执行到动画正常跑完,人物会跑到左下角。并且在运行到第3秒的时候会发生突变,人物位置会突然向下突变到 y: 720 的位置。而如果在3秒前打断,则动画结束后,人物正常抵达 {"x":-1000, "y":0} 的位置。
可能的原因是,由于第 1 行的代码并非 -parallel 动画,所以继承了在动画开始前的“立绘当前位置”,将 y 填补成了 720。在动画运行中,持续被后来的动画覆盖 y 的坐标。但是当 3 秒结束,第 1 行启动的动画占据主导,将 y 不断更新为 720。
考虑到 3,4 两行代码的情况,则没有问题,因为第二段动画持续时间比第 1 段长。
由于第 1 行的代码并非 -parallel 动画,所以其预填写了动画开始前的状态进入关键帧,后续发生了覆盖 y 的行为,因此终态的 y 是 720,没有问题。但是如果打断动画,则会令后一段动画覆盖 y 的值,使得终态的 y 是 0。
这一不一致方向,在正常开发中一般不会轻易出现。设置两个平行动画并且后一个比前一个短,前一个还不带 -parallel 的情况较为罕见。但是这仍然是一个不一致问题,值得注意
@TremblingMoeNew 我们正在 4.6 分支解决该问题。如果你考虑好如何修复,请从 refactor-state-mgmt 拉出代码并设置为 PR 的基。
考虑以下代码:
让我们假设初始运行状态是 {"x":1000,"y":720} 的情况。
其中,1,2 两行代码,如果执行到动画正常跑完,人物会跑到左下角。并且在运行到第3秒的时候会发生突变,人物位置会突然向下突变到 y: 720 的位置。而如果在3秒前打断,则动画结束后,人物正常抵达 {"x":-1000, "y":0} 的位置。
可能的原因是,由于第 1 行的代码并非 -parallel 动画,所以继承了在动画开始前的“立绘当前位置”,将 y 填补成了 720。在动画运行中,持续被后来的动画覆盖 y 的坐标。但是当 3 秒结束,第 1 行启动的动画占据主导,将 y 不断更新为 720。
考虑到 3,4 两行代码的情况,则没有问题,因为第二段动画持续时间比第 1 段长。
由于第 1 行的代码并非 -parallel 动画,所以其预填写了动画开始前的状态进入关键帧,后续发生了覆盖 y 的行为,因此终态的 y 是 720,没有问题。但是如果打断动画,则会令后一段动画覆盖 y 的值,使得终态的 y 是 0。
这一不一致方向,在正常开发中一般不会轻易出现。设置两个平行动画并且后一个比前一个短,前一个还不带 -parallel 的情况较为罕见。但是这仍然是一个不一致问题,值得注意
@TremblingMoeNew 我们正在 4.6 分支解决该问题。如果你考虑好如何修复,请从 refactor-state-mgmt 拉出代码并设置为 PR 的基。