import java.util.Timer;
import java.util.TimerTask;
public class HelloWorld {
public static void main(String []args) {
// number of ms in 1/60 of a second
// there will be some rounding error here,
// not sure if that's acceptable for your use case
int ms = 1000 / 60;
Timer timer = new Timer();
timer.schedule(new SayHello(), 0, ms);
}
}
class SayHello extends TimerTask {
public void run() {
System.out.println("Hello World!");
}
}
3条答案
按热度按时间ztigrdn81#
rxztt3cl2#
要在定义的时间段内停止执行,可以使用
Thread.sleep(millis , nanos)
```for(;;){
stepEvent();
Thread.sleep(100);
}
ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
scheduledExecutorService.scheduleAtFixedRate(YourClass::stepEvent, 0, 100, TimeUnit.MILLISECONDS);
8ljdwjyq3#
这只是一种方法(它非常长,但非常精确-我推荐它用于游戏开发)。在这种情况下,我使用
run()
方法来执行代码。逐行解释:
基本上,我将当前时间以纳秒为单位存储在
lastTime
. 然后在ns
我以纳秒为单位存储1/60秒并创建一个变量delta
.在这之后,我进入无限while循环(它不必是无限的)并再次以纳秒为单位存储当前时间
now
. 这要考虑到计算机从lastTime
声明行到while循环行。做完这一切之后,我又加了一句
delta
差异now
以及lastTime
除以1/60秒(ns
)我提到过。这意味着每次delta
等于1,1/60秒就会过去。就在这之后,我
lastTime
与…相同now
. 在随后的while循环中,我检查delta是否等于或大于1,然后在其中,您应该将所有希望每秒执行60次的代码放入其中。别忘了从中减去1delta
所以它不会无休止地循环。仔细分析代码,看看你是否能理解它。如果你不能,我会进一步澄清。我坚持认为这只是一种可行的方法,但还有更多的方法。
注意:在某些情况下,您甚至不需要
delta
,但它对某些目的非常有用。代码的功劳:大部分代码(至少是我从哪里得到的和学到的)都是从cherno的游戏编程系列中提取的
祝你有美好的一天!