I confirmed this is working by design. When you call AnimationState update
twice in a row without AnimationState apply
in between, the animation that mixed out misses its change to reset the values it was animating to the setup pose.
// Tick big enough to start the transition from one animation to the next.
state.update(0.101f);
state.apply(skeleton1);
System.out.println("1: x " + bone1.x + ", scaleX " + bone1.scaleX); // x 100.0, scaleX 1.0
System.out.println();
// translate_100_ms has been mixed out, the next apply will reset translation to the setup pose.
state.update(0.001f);
// There is no apply here!
// translate_100_ms is no longer applied, bone1 is left translated because there was no apply since last update.
state.update(0.2f);
state.apply(skeleton1);
System.out.println("1: x " + bone1.x + ", scaleX " + bone1.scaleX); // x 100.0, scaleX 2.0
System.out.println();
// bone1 still has x=100 because it never got reset to the setup pose.
state.apply(skeleton1);
state.apply(skeleton2);
System.out.println("1: x " + bone1.x + ", scaleX " + bone1.scaleX); // x 100.0, scaleX 2.0
System.out.println("2: x " + bone2.x + ", scaleX " + bone2.scaleX); // x 0.0, scaleX 2.0
full Java source
When an animation is applied, it only changes the properties it has timelines for. The last two calls to apply
do indeed pose the skeletons identically, however the changes from the previous animation got left behind because it was not applied after it was done mixing out.