Skip to content

平行动画的矛盾发现 #938

@MakinoharaShoko

Description

@MakinoharaShoko

考虑以下代码:

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 的基。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions