2012-06-09 40 views
0

我一直在瀏覽一些JavaFX教程,並對使用的動畫系統有幾個問題。JavaFX動畫

Timeline timeline = new Timeline(); 
    Node circle = circles; 
    timeline.getKeyFrames().addAll(
       new KeyFrame(Duration.ZERO, // set start position at 0 
        new KeyValue(circle.translateXProperty(), random() * 800), 
        new KeyValue(circle.translateYProperty(), random() * 600)), 

       new KeyFrame(new Duration(40000), // set end position at 40s 
        new KeyValue(circle.translateXProperty(), random() * 800), 
        new KeyValue(circle.translateYProperty(), random() * 600))); 

    // play 40s of animation 
    timeline.play(); 
    primaryStage.show(); 
} 

什麼我不明白的是使用的translateXProperty()函數(Y)以及隨機數的鍵值構造的目的。我瞭解該過程的工作方式是創建了兩個在兩個框架之間插入的KeyFrame,並且KeyValue只是簡單地表示節點的不同狀態,但我不確定這是否正確。

我期待在本教程是在這裏:http://docs.oracle.com/javafx/2/get_started/animation.htm

我只是用一個圓圈在上面的代碼,把事情簡單化。

回答

4

該代碼在40秒內從一個隨機位置移動(翻譯)一個圓圈。第一個關鍵幀指定起始翻譯座標。第二個關鍵幀指定結束翻譯座標。 JavaFX動畫子系統負責在場景後面的中間幀內插翻譯鍵值。

該代碼可以動畫不同的屬性,如縮放或旋轉。它可以使用絕對值而不是隨機值。它只是使用它所做的屬性和值,因爲它們指定了作者試圖在此實例中實現的效果。

+0

如果我正確理解你的話,你說上面的代碼,特別是隨機值只是告訴程序在40秒內從一個座標移動到另一個座標?我猜我不明白爲什麼它不會寫成像新的KeyValue(circle.translateYProperty(random()* 600));然後? – adc90

+1

'KeyFrame'標記一個時間點,'KeyValue'標記一個專用屬性在該時間點應該有的值。在給定的示例中,'translateY'必須在40秒時具有值'random()* 600'。 –

+0

@SergeyGrinev謝謝,我想我現在明白了。 – adc90