2016-05-10 1 views
0

私の学校プロジェクトでは、大砲が飛行機に弾を撃たなければならないゲームを作る必要があります。問題は、私たちが撮影するときにすべての位置を見ることができることです)コンソール上の箇条書きのが、弾丸はUIJavaFXが弾丸位置UIをループで更新する

に更新されません。ここではテストコードは次のとおりです。

vel = Slider.getValue(); 
double angle = panelNero.getRotate(); 
boolean dead = false; 

while (dead == false) { 
    double X = P.getLayoutX(); 
    double Y = P.getLayoutY(); 
    if (X > 1 && Y > 1 && X < MP.getWidth() && Y < MP.getHeight()) { 
     System.out.println("x: " + X + " y: " + Y + " maxX: " + MP.getWidth() + " maxY: " + MP.getHeight()); 

     double x = P.getLayoutX(); 
     double y = P.getLayoutY(); 
     P.setLayoutX(x += (Math.cos(Math.toRadians(angle)) * vel)); 
     P.setLayoutY(y += (Math.cos(Math.toRadians(angle)) * vel)); 
     System.out.println("VIVO"); 
     try { 
      TimeUnit.MILLISECONDS.sleep(500); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(FileFXMLController.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } else { 
     System.out.println("MORTO"); 

     P.setLayoutX(pro.posX); 
     P.setLayoutY(pro.posY); 
     dead = true; 
    } 
} 
+0

の可能性のある重複した[JavaFXの定期的なバックグラウンドタスク](http://stackoverflow.com/questions/9966136/javafx-periodic-background-task) – fabian

答えて

0

この記事をご覧ください:Platform.runLater and Task in JavaFX

あなたはPlatform.runlater()にを使用することができますGUI以外のスレッドからGUIを更新する。この場合、更新要求はキューに入れられ、GUIスレッドASAPによって処理されます。

しかし、これはより複雑な繰り返しなので、新しいThreadTaskを使用することを検討できます。

は、私はあなたがこのようなものを使用することをお勧め:

Task task = new Task<Void>() { 
    @Override 
    public Void call() throws Exception { 
     while (dead == false) { 
      Platform.runLater(new Runnable() { 
       @Override 
       public void run() { 
        P.setLayoutX(...); 
        P.setLayoutY(...); 
       } 
      }); 
      Thread.sleep(500); 
     } 
    } 
}; 
Thread th = new Thread(task); 
th.start(); 
関連する問題