gpt4 book ai didi

java - 紧循环不好吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:48:18 25 4
gpt4 key购买 nike

程序中的紧密循环不好吗?

我有一个应用程序有两个用于游戏物理模拟器的线程。一个更新游戏线程和一个渲染线程。渲染线程通过使线程 hibernate 几毫秒(以达到我想要的帧速率)而受到限制,而 updateGame 线程(根据一些物理方程更新我在游戏中的对象位置)之前被 10 毫秒的 sleep 节流.

但是,我最近解除了 updateGame 线程的节流,现在我已经取消了 10 毫秒的 sleep ,我的对象运动模拟似乎更加真实。是热循环还是紧循环不好?

private class UpdateTask implements Runnable
{
private long previousTime = System.currentTimeMillis();
private long currentTime = previousTime;
private long elapsedTime;


public void run()
{
while(true)
{
currentTime = System.currentTimeMillis();
elapsedTime = (currentTime - previousTime); // elapsed time in seconds


updateGame(elapsedTime / 1000f);

try {
Thread.currentThread().sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

previousTime = currentTime;
}
}
}

在这个例子中,我只睡了 1 毫秒(根据我对毫秒精度和 sleep 功能如何工作的理解,这可能更像是 5-10 毫秒。如果我睡的时间超过这个时间,它就会开始对我的碰撞检测和物理模型的准确性。

在其中使用 1ms hibernate 的紧密循环或循环是否是一种不好的做法?还有什么我应该做的吗?

最佳答案

我读了一篇关于高效且有效地执行物理计算循环的非常棒的文章:Fix Your Timestep!

当游戏运行时,用户通常关心的主要应用程序如此紧凑的循环并不是什么大问题。通过安排更新,您真正应该做的是什么。您应该知道您的帧必须执行多长时间(在您的目标帧速率下)。您应该测量帧所用的时间,并且只在帧所用时间减去已知帧时间后才 hibernate 。这样,您的系统将锁定一个帧速率,并且不会随帧渲染所需的时间而变化。

另一件事是,我不认为 Thread.sleep 有很好的分辨率,远超过 5 毫秒,您可能需要寻找更准确的 Java 计时器。

关于java - 紧循环不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/361756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com