Farseer Physics非xna在分离线程上

本文关键字:分离 线程 xna Physics Farseer | 更新日期: 2023-09-27 18:02:41

我正在用c#开发一款没有XNA的游戏。我把world.Step(float dt)在一个单独的线程,以保持形式活着(事实上,一个while循环会阻止每一个其他操作)。嗯,球,一个动态的物体,跑得快或慢取决于中央处理器的频率。我认为Thread.Sleep()通过读取CPU频率并将其乘以某些东西来计算延迟时间,但我很确定我错了。我是个小菜鸟。任何建议吗?

Farseer Physics非xna在分离线程上

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线程上,或者通过向其他线程发送信号。