问题描述
我遇到了一个问题,在一个线程上做所有事情可能会导致一些滞后。问题是,当我开始创建大量新对象(例如每秒 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();
}
}
解决方法
看起来最好的解决方案(如评论中所建议的)是在第二个线程上运行第二个循环,只更新物理,其他所有内容都在另一个线程上。
这样丢帧就不会影响物理更新。
编辑:实现了这一点,并像魅力一样工作。我会在可以的时候标记答案。