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
parameter的KeyFrame
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();