Farseer Physics非xna在分离线程上
本文关键字:分离 线程 xna Physics Farseer | 更新日期: 2023-09-27 18:02:41
我正在用c#开发一款没有XNA的游戏。我把world.Step(float dt)
在一个单独的线程,以保持形式活着(事实上,一个while循环会阻止每一个其他操作)。嗯,球,一个动态的物体,跑得快或慢取决于中央处理器的频率。我认为Thread.Sleep()
通过读取CPU频率并将其乘以某些东西来计算延迟时间,但我很确定我错了。我是个小菜鸟。任何建议吗?
Thread.Sleep
是非常不准确的方式来计时的事情。你想使用类似这样的内容:
Stopwatch timer = new Stopwatch();
timer.Start();
你可以用它来驱动一个定时更新循环,像这样:
// Run enough updates to catch up to the current time
private void Idle()
{
double time = timer.Elapsed.TotalSeconds;
accumulatedTime += (time - lastTime);
lastTime = time;
const double frameTime = 1.0/60.0; // 60 frames per second
while(accumulatedTime > frameTime)
{
world.Step((float)frameTime);
accumulatedTime -= frameTime;
}
}
你可以调用上面的Idle
方法,然后在循环中调用一个简短的Sleep
。
或者你可以从Application.Idle
的事件处理程序中调用它-直接在UI线程上,或者通过向其他线程发送信号。