我正在学习一个教程,下面是生成逻辑和框架更新的运行方法。我了解滴答声如何以 60 滴答声/秒的速度更新,但我不明白我们如何在这里调整每秒帧数。
现在使用 Thread.sleep(2),每秒帧数约为 460。没有它,数字会大幅上升,每秒更新约 1000 万次。代码 Thread.sleep(2) 仅将线程挂起 2 毫秒,对吗?为什么/如何 Thread.sleep 在这里准确地工作以降低它这么低?
创建一个 nsPerFrame = 1000000000D/ (FPS)D 来设置我想要的任何 FPS 不是更简单吗?
public void run(){
long lastTime = System.nanoTime();
double nsPerTick = 1000000000D / 60D;
int frames = 0;
int ticks = 0;
long lastTimer = System.currentTimeMillis();
double delta = 0;
while(running){
long now = System.nanoTime();
delta += (now - lastTime) / nsPerTick;
lastTime = now;
while(delta >= 1){
ticks++;
tick();
delta-= 1;
}
try{
Thread.sleep(2);
} catch(InterruptedException e){
e.printStackTrace();
}
frames++;
render();
if(System.currentTimeMillis() - lastTimer >= 1000){
lastTimer += 1000;
System.out.println(ticks + "," + frames);
frames = 0;
ticks = 0;
}
}
}