KeyValue start = new KeyValue(enemy.translateXProperty(), 0);
KeyValue end = new KeyValue(enemy.translateXProperty(), 600);
KeyValue back = new KeyValue(enemy.translateXProperty(), 0);

KeyFrame startFrame = new KeyFrame(Duration.ZERO, start);
KeyFrame endFrame = new KeyFrame(Duration.seconds(5), end);
KeyFrame backFrame = new KeyFrame(Duration.seconds(5), back);

Timeline timeline = new Timeline(startFrame, endFrame, backFrame);
timeline.setCycleCount(Timeline.INDEFINITE);
timeline.play();


由于只是我正在阅读的javafx书籍的动画部分,所以这只是一些播放的片段,但是我想知道为什么它不起作用。基本上,这仅是要使圆圈反复向右和向左移动。 KeyValue的“后退”应该使它回到起点,但不是,并且圆圈转到最右边,然后产生回到其立即开始的位置。

我是不是误解了KeyValues,还是什么?这是什么问题

最佳答案

Duration time parameterKeyFrame constructor需要相对于动画开始的时间,而不是相对于最后一个KeyFrame的时间。

如果要在动画的前5秒钟内将enemy.translateXProperty()属性从0设置为600的动画,并在接下来的5秒钟内将其设置为0的动画,则需要使用Duration.seconds(10)作为 back

KeyFrame backFrame = new KeyFrame(Duration.seconds(10), back);


请注意,为简单地添加反向动画,您还可以将KeyFrame设置为autoReverse

KeyValue start = new KeyValue(enemy.translateXProperty(), 0);
KeyValue end = new KeyValue(enemy.translateXProperty(), 600);

KeyFrame startFrame = new KeyFrame(Duration.ZERO, start);
KeyFrame endFrame = new KeyFrame(Duration.seconds(5), end);

Timeline timeline = new Timeline(startFrame, endFrame);
timeline.setAutoReverse(true);
timeline.setCycleCount(Timeline.INDEFINITE);
timeline.play();

08-28 17:05