JavaFX - 我误解了如何使用KeyValues吗?

时间:2016-07-08 20:15:03

标签: java animation javafx

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'back'应该将它带回到开头,但它没有,并且圆圈向右移动然后产生回到它立即开始的位置。

我是否误解了KeyValues的内容,或者是什么?这有什么问题?

1 个答案:

答案 0 :(得分:2)

Duration time parameterKeyFrame constructor相对于动画的开头需要时间,而不是相对于上一个KeyFrame

如果要在动画的前5秒内将enemy.translateXProperty()属性设置为0到600的动画,并在接下来的5秒内将其设置为0,则需要使用Duration.seconds(10)作为参数对于back KeyFrame的构造函数。

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

请注意,只需添加反转动画,您还可以将autoReverse设置为true

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();