2016-07-08 45 views
1
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'應該會回到開頭,但它不會,並且該圈子到達右邊,然後回到它立即開始的位置。JavaFX - 我誤解如何使用KeyValues?

我誤解了KeyValues,還是什麼?這裏有什麼問題?

+0

第三'''KeyFrame'''時間也許應該是'''時間。秒(10)'''(即10秒的關鍵幀)不是5? –

回答

2

KeyFrame constructorDuration time parameter需要相對於動畫開始的時間,而不是相對於最後的KeyFrame

如果你想在動畫的前5秒時以動畫從0到600 enemy.translateXProperty()財產和以下5秒內動畫回0,則需要使用Duration.seconds(10)作爲參數爲backKeyFrame的構造。

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

注意,對於簡單地把反向動畫,你也可以設置autoReversetrue

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