因此,我希望能够通过更改“持续时间”来更改动画的速度。我知道Java文档说无法完成,但是停止动画,更改“持续时间”并从停止点开始没有任何问题。有了这个实现,我的圈子就停止了,不想再移动了。我能以某种方式做到吗?如果不能,如何制作速度可变的动画?
编辑: 它确实有效,但是当我更改“持续时间”时,起点会发生变化,而终点不会改变,因此它会越来越接近终点直到停止为止(除非我仅在圆接近初始起点)。对仅影响动画速度的算法有什么想法吗?
public void initialize() {
TranslateTransition transition = new TranslateTransition();
transition.setDuration(Duration.seconds(2));
transition.setToX(162);
transition.setToY(72);
transition.setAutoReverse(true);
transition.setCycleCount(TranslateTransition.INDEFINITE);
transition.setNode(myCircle);
transition.play();
mySlider.valueProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue arg0, Object arg1, Object arg2) {
transition.stop();
Duration d = transition.getDuration();
transition.setDuration(Duration.seconds(mySlider.getValue()));
transition.playFrom(d);
System.out.println(mySlider.getValue());
}
});
}
答案 0 :(得分:2)
编辑:它实际上有效,但是当我更改“持续时间”时,起点发生变化,而终点没有变化,因此它越来越接近终点,直到停止为止(除非我仅在该圆接近初始起点。
由于未指定translateX
和translateY
的起始值,因此TranslateTransition
将在从停止状态转换为另一状态时获取这些属性的当前值。由于您确实停止了转换,因此滑块的每次更改都会发生这种情况。那时,translate属性的值可能与起始位置不同。
此外,如果减小持续时间滑块的值,则传递给playFrom
方法的时间可能在循环结束之后。
我建议改为修改rate
property:
TranslateTransition transition = new TranslateTransition();
transition.setDuration(Duration.seconds(1));
...
transition.rateProperty().bind(Bindings.divide(1d, mySlider.valueProperty()));