2015-05-25 59 views
0

我正在嘗試使對象在屏幕上移動,只改變其x值的應用程序。我沒有收到任何錯誤,但是當我運行它時它不工作。對象正在顯示,但矩形不是動畫。我不知道該怎麼辦JavaFX動畫無法正常工作

import javafx.animation.Animation; 
import javafx.animation.KeyFrame; 
import javafx.animation.Timeline; 
import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.AnchorPane; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.VBox; 
import javafx.scene.shape.Circle; 
import javafx.scene.shape.Rectangle; 
import javafx.stage.Stage; 
import javafx.util.Duration; 

public class Main extends Application { 

    private BorderPane root; 
    private Stage stage; 
    private Scene scene; 
    private AnchorPane anchorPane; 
    private Rectangle player; 
    private Circle circles; 
    private Button up, down; 
    private Timeline timer; 

    @Override 
    public void start(Stage primaryStage) { 
     stage = primaryStage; 
     root = new BorderPane(); 
     scene = new Scene(root, 600, 500); //width and height of application 
     stage.setScene(scene); 
     stage.setTitle("Hoop runner"); //text for the title bar of the window 

     scene.getStylesheets().add("hoop.css"); 

     anchorPane = new AnchorPane(); 
     anchorPane.setMaxHeight(500); 
     anchorPane.setMinHeight(500); 
     anchorPane.setMinWidth(600); 
     anchorPane.setMaxWidth(600); 
     player = new Rectangle(); 
     circles = new Circle(); 
     up = new Button("˄"); 
     down = new Button("˅"); 


     root.setCenter(new VBox(new VBox(circles), 
       new HBox(player))); 

     root.setCenter(anchorPane); 

     player.setX(5); 
     player.setY(380); 
     player.setHeight(80); 
     player.setWidth(120); 
     anchorPane.getChildren().add(player); 

     timer = new Timeline(Animation.INDEFINITE); 

     timer.setCycleCount(Animation.INDEFINITE); 

     timer.getKeyFrames().add(new KeyFrame(Duration.INDEFINITE, event -> maverick())); 


     timer.play(); 







     stage.show(); 




    } 

    private void maverick() { 




      timer.play(); 
      System.out.println("hi"); 
      player.setX(player.getX() + 2); 
      timer.play(); 

    } 


    public static void main(String[] args) { 
     launch(args); 
    } 
} 

回答

0
  • 使用setTranslateX而不是setX如果要定位或動畫節點。
  • 更改timer = new Timeline(Animation.INDEFINITE)timer = new Timeline()。 (例如)
  • 變化new KeyFrame(Duration.INDEFINITE, event -> maverick())變爲new KeyFrame(Duration.millis(500), event -> maverick())(例如)。

KeyFrame必須有一個時間點。如果像例子那樣使用500ms,那麼KeyFrame的EventHandler將在500ms後被調用。由於您的TimeLine具有INDEFINITE的cycleCount,它將每500ms循環並執行KeyFrame。

+0

在做出上述更改後,我的對象能夠移動一次,但之後停止。我如何讓它繼續移動? –

+0

您是否刪除了'timer.setCycleCount(Animation.INDEFINITE);'?你不應該。這仍然需要告訴時間線循環,所以關鍵幀每500ms發生一次,而不是在500ms之後發生一次。 –