所以,我正在用 Java 制作一个 2D 游戏,我真的没有太多的 Java 经验。我目前使用一个非常简单的循环,使用每 10 毫秒左右运行一次的摆动计时器,看起来像:
public void actionPerformed(ActionEvent e) {
update();
repaint();
}
但是,出于显而易见的原因,我需要一些更实用的东西。这些原因包括更多的延迟意味着更少的 FPS 和更慢的移动/其他更新。我在此处的 3D Java 游戏教程中找到了以下代码。它会在程序启动时开始运行,我知道它会起作用。但是,我并不完全理解它:(tick() 是更新程序,render() 渲染屏幕)
long currenttime;
long previoustime = System.nanoTime();
long passedtime;
int frames = 0;
double unprocessedseconds = 0;
double secondspertick = 1 / 60.0;
int tickcount = 0;
boolean ticked = false;
while (gameIsRunning) {
currenttime = System.nanoTime();
passedtime = currenttime - previoustime;
previoustime = currenttime;
unprocessedseconds += passedtime / 1000000000.0;
while (unprocessedseconds > secondspertick) {
tick();
unprocessedseconds -= secondspertick;
ticked = true;
tickcount++;
System.out.println(tickcount);
if (tickcount % 60 == 0) {
System.out.println(frames + " FPS");
previoustime += 1000;
frames = 0;
}
}
if (ticked) {
render();
frames++;
}
render();
frames++;
}
我发现它的教程中没有解释这个代码。有人可以把它分解并解释一下吗?我也在这里寻找想法,该页面上带有渲染线程和更新线程的最后一段代码对我来说很有意义。我应该使用哪种方法?以上之一,还是完全不同的东西?此外,您可能会说这是我在 stackoverflow 上的第一个问题。在此先感谢,乔希