Java FX TranslateTransition持续时间更改

时间:2019-05-18 23:50:02

标签: java javafx

因此,我希望能够通过更改“持续时间”来更改动画的速度。我知道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());

            }
        });
    }

1 个答案:

答案 0 :(得分:2)

  

编辑:它实际上有效,但是当我更改“持续时间”时,起点发生变化,而终点没有变化,因此它越来越接近终点,直到停止为止(除非我仅在该圆接近初始起点。

由于未指定translateXtranslateY的起始值,因此TranslateTransition将在从停止状态转换为另一状态时获取这些属性的当前值。由于您确实停止了转换,因此滑块的每次更改都会发生这种情况。那时,translate属性的值可能与起始位置不同。
此外,如果减小持续时间滑块的值,则传递给playFrom方法的时间可能在循环结束之后。

我建议改为修改rate property

TranslateTransition transition = new TranslateTransition();
transition.setDuration(Duration.seconds(1));
...

transition.rateProperty().bind(Bindings.divide(1d, mySlider.valueProperty()));