物理更新滞后
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();
}
}
看起来最好的解决方案(如评论中所建议的)是 运行 在第二个线程上进行第二个循环,只更新物理,其他线程上的所有其他内容。
这样丢帧就不会干扰物理更新。
编辑:实现了这个,并且很有魅力。我会在有空的时候标记答案。
我 运行 遇到一个问题,在单个线程上执行所有操作可能会导致一些延迟。问题是,当我开始创建大量新对象(比如每秒 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();
}
}
看起来最好的解决方案(如评论中所建议的)是 运行 在第二个线程上进行第二个循环,只更新物理,其他线程上的所有其他内容。
这样丢帧就不会干扰物理更新。
编辑:实现了这个,并且很有魅力。我会在有空的时候标记答案。