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的内容,或者是什么?这有什么问题?
答案 0 :(得分:2)
Duration time
parameter的KeyFrame
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();