Java游戏循环中的未处理时间
问题描述:
我正在查看notch的游戏循环,我无法理解unprocessedTime变量的含义是什么。Java游戏循环中的未处理时间
long now = System.nanoTime();
unprocessedTime += now - lastTime;
lastTime = now;
我会很感激,如果有人可以解释我的两个variables.Thanks
public void run() {
requestFocus();
Image image = new BufferedImage(320, 240, BufferedImage.TYPE_INT_RGB);
setScreen(new TitleScreen(this));
long lastTime = System.nanoTime();
long unprocessedTime = 0;
[b] try {
Thread.sleep(500);
} catch (InterruptedException e1) {
e1.printStackTrace();
}[/b]
while (running) {
Graphics g = image.getGraphics();
long now = System.nanoTime();
unprocessedTime += now - lastTime;
lastTime = now;
int max = 10;
[b]while (unprocessedTime > 0) {
unprocessedTime -= 1000000000/60;
fps = unprocessedTime;
screen.update(input);
input.update();
if (max-- == 0) {
unprocessedTime = 0;
break;
}
}[/b]
screen.render(g);
g.dispose();
try {
started = true;
g = getGraphics();
g.drawImage(image, 0, 0, GAME_WIDTH * SCREEN_SCALE, GAME_HEIGHT * SCREEN_SCALE, 0, 0, GAME_WIDTH, GAME_HEIGHT, null);
g.dispose();
} catch (Throwable e) {
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
答
之间这accumnulating在最近一次事件被触发之间纳秒经过时间的差别..
根据Java Doc(如果您需要了解nanoTime) System.nanoTime();
以毫微秒为单位返回最精确的可用系统计时器的当前值,即 。此方法只能用于测量已用时间 ,并且与系统或挂钟时间的任何其他概念无关。 返回的值表示自一些固定但随机时间(可能在未来,因此值可能为负数)以来的毫微秒。 该方法提供了纳秒精度,但不一定是 纳秒精度。不保证值的更改频率如何变化。由于数值溢出,大约292年(263纳秒)跨度大于 的连续调用差异将无法准确计算经过的时间。
向我们展示完整的代码,但它似乎是所有循环的总时间。 –