许多游戏循环使用刻度和渲染,当刻度每 X 毫秒完成一次并尽可能渲染时。为什么不勾选然后渲染呢? 在我看来,在刻度之间渲染将绘制相同的东西,那么为什么要多次调用它呢? (如果没有请解释原因)
典型的游戏循环是:
public void run() {
long lastTime = System.nanoTime();
double amountOfTicks = 60.0;
double nsBetweenTicks = 1000000000 / amountOfTicks;
double delta = 0;
long timer = System.currentTimeMillis();
while(running){
long now = System.nanoTime();
delta += (now - lastTime) / nsBetweenTicks;
lastTime = now;
while(delta >=1){
tick();
delta--;
}
render();
}
}
我的问题是为什么不:
public void run() {
long lastTime = System.nanoTime();
double amountOfTicks = 60.0;
double nsBetweenTicks = 1000000000 / amountOfTicks;
double delta = 0;
long timer = System.currentTimeMillis();
while(running){
long now = System.nanoTime();
delta += (now - lastTime) / nsBetweenTicks;
lastTime = now;
while(delta >=1){
tick();
render();
delta--;
}
}
}
最佳答案
游戏逻辑不应与帧率 Hook 。
有些游戏不使用每秒 60 个刻度,有些游戏(如《我的世界》)以每秒 20 个刻度运行。这将有效地将游戏锁定在 20 fps。
即使所有游戏都以每秒 60 次滴答的速度运行,如果有人拥有 144 Hz 显示器怎么办?他会卡在 60 fps 下玩。
如果您渲染游戏的频率高于滴答声,您仍然可以在渲染逻辑中运行动画和其他内容,而游戏逻辑会停止很长时间,即使其滴答声频率也使游戏流畅比显示器的刷新率慢。
关于java - 为什么游戏循环渲染的次数比更新的次数多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57710138/