我正在制作一款 2D 游戏,我意识到 FPS 大约是 500,但它一直下降到 440,这会产生可怕的延迟峰值,所以我想设置一个最大 fps 来阻止延迟峰值,但我不知道该怎么做。游戏循环:
public void run(){
this.requestFocus();
long lastTime = System.nanoTime();
double amountOfTicks = 60.0;
double ns = 1000000000/amountOfTicks;
double delta = 0;
long timer = System.currentTimeMillis();
int frames = 0;
while(running){
long now = System.nanoTime();
delta += (now - lastTime) / ns;
lastTime = now;
while(delta >= 1){
tick();
delta--;
}
if(running)
render();
frames++;
if(System.currentTimeMillis() - timer > 1000){
timer += 1000;
System.out.println("FPS: " + frames);
frames = 0;
}
}
stop();
}
只需使用与控制即时报价数量相同的控制机制即可。试试这个,把你想要的最大FPS放在'amountOfRenders'变量中。
public void run(){
this.requestFocus();
long lastTime = System.nanoTime();
double amountOfTicks = 60.0;
double ns = 1000000000/amountOfTicks;
double delta = 0;
long timer = System.currentTimeMillis();
int frames = 0;
int ticks = 0;
long renderLastTime=System.nanoTime();
double amtOfRenders = 200.0;//MAX FPS
double renderNs=1000000000/amtOfRenders;
double renderDelta = 0;
while(running){
long now = System.nanoTime();
delta += (now - lastTime) / ns;
lastTime = now;
while(delta >= 1){
tick();
ticks++;
delta--;
}
now = System.nanoTime();
renderDelta += (now - renderLastTime) / renderNs;
renderLastTime = now;
while(running && renderDelta >= 1){
render();
frames++;
renderDelta--;
}
if(System.currentTimeMillis() - timer > 1000){
timer += 1000;
System.out.println("FPS: " + frames);
System.out.println("Ticks per second: " + ticks);
frames = 0;
ticks = 0;
}
}
stop();
}