物理更新滞后

Physics update lag

我 运行 遇到一个问题,在单个线程上执行所有操作可能会导致一些延迟。问题是,当我开始创建大量新对象(比如每秒 300 个)时,我的物理速率下降了。

我每帧都对所有渲染对象进行排序,所以我会知道按什么顺序绘制哪个,这可能是它只能处理这么少的原因,但即使去掉了,仍然会有每次更新的最大操作数,否则物理会滞后。

关于如何实现正确的 zOrder 或消除可能的物理滞后有什么想法吗?

或者从渲染中分离物理...?

我的游戏循环:

while (isRunning) {

    currentFrameTime = System.nanoTime();
    passedTime = currentFrameTime - lastFrameTime;
    lastFrameTime = currentFrameTime;

    physicsPassedTime += passedTime;
    updatePassedTime += passedTime;

    if (physicsPassedTime >= (double) 1_000_000_000 / physicsRate) {

        physicsPassedTime = 0;

        PhysicsUpdate();
    }

    if (updatePassedTime >= (double) 1_000_000_000 / refreshRate) {

        updatePassedTime = 0;

        Update();
        Render();
        LateUpdate();
    }
}

看起来最好的解决方案(如评论中所建议的)是 运行 在第二个线程上进行第二个循环,只更新物理,其他线​​程上的所有其他内容。

这样丢帧就不会干扰物理更新。

编辑:实现了这个,并且很有魅力。我会在有空的时候标记答案。