我正在查看缺口的游戏循环,我无法理解unprocessedTime变量的含义。
long now = System.nanoTime();
unprocessedTime += now - lastTime;
lastTime = now;
如果有人能解释我两个变量之间的区别,我将非常感激。谢谢
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();
}
}
}
答案 0 :(得分:0)
这是累计上次触发事件之间的失效时间(以纳秒为单位)......
根据Java Doc(如果您需要了解nanoTime) System.nanoTime();
返回最精确的可用系统计时器的当前值, 以纳秒为单位。此方法只能用于测量经过的时间 并且与系统或挂钟时间的任何其他概念无关。 返回的值表示纳秒,因为一些固定但是 任意时间(也许在将来,所以价值可能是负面的)。 该方法提供纳秒精度,但不一定 纳秒精度。不保证频率如何 价值观改变。连续调用的差异跨越大于 大约292年(263纳秒)将无法准确计算 数值溢出导致的经过时间。