java - 为什么游戏循环渲染的次数比更新的次数多

标签 java java-2d game-development game-loop

许多游戏循环使用刻度和渲染,当刻度每 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/

相关文章:

java - 如何使用单个/简单的 for 循环以不同的比例和平移多次绘制蝴蝶曲线?

c++ - 从鼠标位置数学设置 Actor 世界位置

Java2D : interaction between XWindows events and frame rate

java - ListView 在提交之前从外部源修改

java - 通用数据结构上的 Collections.sort() 不起作用

java - 如何用同类的新实例替换pojo对象?

java - 在 Jpanel 上拖动形状

java - android位图中的内存不足错误

java - 更新我的图形

javascript - 将 Babylon.js 与 Electron 一起使用