使用秒表在C#中查找deltatime

时间:2014-05-02 00:56:32

标签: c# timespan stopwatch

我试图写一个固定的时间步。

        Stopwatch timer = Stopwatch.StartNew();
        TimeSpan dt = TimeSpan.FromSeconds(1/50);
        TimeSpan elapsedTime = TimeSpan.Zero;

        while(window.IsOpen())
        {
            timer.Restart();
            elapsedTime = timer.Elapsed;

            while(elapsedTime > dt)
            {
                window.DispatchEvents();

                elapsedTime -= dt;

                gameObject.FixedUpdate(deltaTime goes here as double);
            }
         }

我想将dt作为参数传递给FixedUpdate作为double,有没有办法以某种方式转换它?

我也不太确定这一行TimeSpan dt = TimeSpan.FromSeconds(1/50);基本上我希望dt能够保持1/50秒。

2 个答案:

答案 0 :(得分:0)

关于此部分TimeSpan.FromSeconds(1/50) TimeSpan.FromSeconds接受double1/50intint / int提供int无浮点部分),以及它的值等于0,当传递给方法时,这些值会被隐式转换为double,最终会得到:TimeSpan.FromSeconds(1/50) -> 00:00:00

为了使其正确,您必须从头开始使用double并使用1.0/50(1.0为双倍):
TimeSpan.FromSeconds(1.0/50) -> 00:00:00.0200000

关于这一个:gameObject.FixedUpdate(deltaTime goes here as double);
我假设你想传递毫秒和参数值。为此你可以写:

gameObject.FixedUpdate(dt.TotalMilliSeconds);

答案 1 :(得分:-1)

在不知道FixedUpdate的内部结构的情况下,您可能需要TotalMilliseconds

Stopwatch timer = Stopwatch.StartNew();
TimeSpan dt = TimeSpan.FromSeconds(1.0/50.0);
TimeSpan elapsedTime = TimeSpan.Zero;
while(window.IsOpen())
{
    timer.Restart();
    elapsedTime = timer.Elapsed;
    while(elapsedTime > dt)
    {
        window.DispatchEvents();
        elapsedTime -= dt;
        gameObject.FixedUpdate(dt.TotalMilliseconds);
    }
 }