2017-04-08 25 views
0

我是Java初学者,在我的游戏JavaFX控制器中,我有以下代码片段。这是一个按钮,启动一个计时器,做一些事情,每5秒,它工作完全正常:用户单击按钮时,如何更改定时器的KeyFrame持续时间?

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

然后我也有一个按钮,改变“秒”变量,它的代码如下所示:

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

它应该做什么:它应该更新计时器,以便它现在执行的所有事情都是2秒而不是5秒。显然,这是行不通的。

如何使它改变点击按钮时定时器的速率?

回答

0

像这样的东西应该工作

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

是的,它工作得很好。谢谢你的帮助! – 4242