2017-04-08 8 views
0

Ich bin ein Java-Anfänger und in meinem JavaFX-Controller für mein Spiel habe ich das folgende Code-Snippet. Es ist ein Knopf, der einen Timer aktiviert, die etwas alle 5 Sekunden der Fall ist, funktioniert es völlig in Ordnung:Wie ändere ich die KeyFrame-Dauer meines Timers, wenn der Benutzer auf eine Schaltfläche klickt?

double seconds = 5.0; 
@FXML 
void unlockBtn(ActionEvent event) { 
      Timeline timer = new Timeline(new KeyFrame(Duration.seconds(seconds), new EventHandler<ActionEvent>() { 

       @Override 
       public void handle(ActionEvent event) { 
        System.out.println("this is called every"+seconds+"seconds on UI thread"); 
       } 
      })); 
      timer.setCycleCount(Timeline.INDEFINITE); 
      timer.play(); 
} 

dann so habe ich auch einen Knopf, der die „Sekunden“ Variable ändert, sieht der Code für sie:

@FXML 
void upgradeSecondsBtn(ActionEvent event) { 
       seconds = 2.0; 
} 

Was es tun sollte: es sollte den Timer aktualisieren, so dass es jetzt etwas alle 2 Sekunden statt 5 Sekunden ausführt. Offensichtlich funktioniert das nicht.

Wie kann es so gemacht werden, dass es die Rate des Timers ändert, wenn die Schaltfläche geklickt wird?

Antwort

0

So etwas sollte funktionieren

Timeline timer; 

@FXML 
void unlockBtn(ActionEvent event) { 
    createTimer(5.0); 
} 

private void createTimer(double seconds) { 
    if (timer != null) { 
     timer.stop(); 
    } 
    timer = new Timeline(new KeyFrame(Duration.seconds(seconds), new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 
      System.out.println("this is called every"+seconds+"seconds on UI thread"); 
     } 
    })); 
    timer.setCycleCount(Timeline.INDEFINITE); 
    timer.play(); 
} 

@FXML 
void upgradeSecondsBtn(ActionEvent event) { 
    createTimer(2.0); 
} 
+0

Ja, es funktioniert sehr gut. Danke für Ihre Hilfe! – 4242

Verwandte Themen