我正在制作一个基本的 2D 游戏,但我遇到了延迟问题。游戏中的角色移动良好,但有时会减速,主要是在靠近敌人时。不过,敌人并没有造成延迟,因为我一次在屏幕上显示了 50 个并且运行良好。我的时间安排几乎与《Killer Game Programming in Java》一书中的时间安排相同,但似乎效果不太好。FPS 似乎也发生了很大变化,这是不应该的,因为它应该总是需要 15 毫秒来完成一个更新-渲染-绘制-睡眠周期,有人可以解释一下吗?
此外,我认为当我的计算机在后台执行操作(防病毒扫描等)时它会滞后更多,尽管我可以在运行其他程序时以大约 550FPS 的速度运行游戏,所以我不认为这是我的计算机。
以下是我如何计时:
int waitTime = 1000 / 65; //65 being the desired FPS
while(running){
if(!loading){
gameUpdate();
gameRender();
gamePaint();
afterTime = System.nanoTime();
timeDiff = afterTime - beforeTime;
sleepTime = waitTime - (timeDiff / 1000000L);
if(sleepTime > 0){
try{
mainThread.sleep(sleepTime);
} catch(InterruptedException ie){}
}
else{
sleepSkipped++;
if(sleepSkipped == maxSleepSkipped){
Thread.yield();
sleepSkipped = 0;
}
}
fpsTime += (System.nanoTime() - beforeTime) / 1000000;
fps++;
if(fpsTime > 1000){
System.out.println("FPS: " + fps);
fps = 0;
fpsTime = 0;
}
beforeTime = System.nanoTime();
}
}