我想在游戏中使用计时器,但我不知道应该在哪里放置(或如何开发)代码,该代码每秒都会更新文本。
此时我正在使用 onMouseMoved 事件处理程序来更新文本,但我希望它在不依赖于鼠标的情况下运行
主类:
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
Text textTimer = new Text(x,y,"string");
numberHandler.timer.scheduleAtFixedRate(numberHandler.startCounting, 0, 1000);
...
}
}
带有定时器的类:
public class numberHandler {
int timePassed = 0;
Timer timer = new Timer();
TimerTask startCounting = new TimerTask() {
@Override
public void run() {
timePassed++;
}
};
}
最佳答案
您可以使用 JFX 的动画计时器
public class NumberHandler{
private StringProperty text = new SimpleStringProperty();
private LongProperty elapsedTime = new SimpleLongProperty(0);
private IntegerProperty seconds = new SimpleIntegerProperty(0);
private AnimationTimer timer = new AnimationTimer() {
@Override
public void handle(long now) {
//now is time in Nano seconds
// to get one second devide by 10^9
if((now-elapsedTime.get())/1_000_000_000L > 1){
secongs.set(seconds.get()+1);
text.set("Time: " + secounds);
}
}
};
public StringProperty getText(){
return text;
}
public void startTimer(){
timer.play();
}
}
在用户界面中,您应该绑定(bind)文本。
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
NumberHandler numberHandler = new NumberHander();
Text textTimer = new Text(x,y,"string");
textTimer.textproperty.bind(humberHandler.getText());
numberHandler.startTimer();
}
}
这只是一种方法。
关于java - 从其他类中的 start() 方法更改文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58321262/