Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用秒表查找C中的deltatime_C#_Timespan_Stopwatch - Fatal编程技术网

C# 使用秒表查找C中的deltatime

C# 使用秒表查找C中的deltatime,c#,timespan,stopwatch,C#,Timespan,Stopwatch,我正试图写一个固定的时间步长 Stopwatch timer = Stopwatch.StartNew(); TimeSpan dt = TimeSpan.FromSeconds(1/50); TimeSpan elapsedTime = TimeSpan.Zero; while(window.IsOpen()) { timer.Restart(); elapsedT

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

        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.FromSeconds1/50;基本上,我想让dt保持1/50秒。

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

关于此部分,时间跨度为秒1/50。TimeSpan.FromSeconds接受double,1/50为int/int给出int,不含浮点部分,其值等于0,当传递给方法时,该值隐式转换为double,最终得到:TimeSpan.FromSeconds1/50->00:00:00

要使其正确,您必须从一开始就使用double,并使用1.0/501.0 is double: 时间跨度。从秒1.0/50->00:00:00.0200000

关于这个:gameObject.FixedUpdatedeltaTime在这里是double; 我假设您希望将毫秒作为参数和值传递。为此,你可以写:

gameObject.FixedUpdate(dt.TotalMilliSeconds);

将dt作为参数传递给FixedUpdate作为double-作为什么的double?毫秒?和大约1/50:TimeSpan.FromSeconds 1.0/50;TimeSpan dt=TimeSpan.FromSeconds1/50;1/50秒。将dt打印到console显示它不包含任何内容,它打印0,所以我认为TimeSpan.FromSeconds不会执行我希望它执行的操作。MSDN文件建议这样做,但它没有:/哦,那我就是视力不好。我正在测试代码,它可以正常工作。如果我转到elapsedTime>dt,它就不会进入第二个循环,因此永远不会调用FixedUpdate…现在,我是这样做的:TimeSpan dt=TimeSpan.FromTicks50,现在它似乎工作了。这里的循环永远不会工作,因为在外部while循环的每次迭代中都会重新启动计时器。同时,内部while循环依赖于重置计时器的运行时间,该时间始终为0或接近0,且永远不会大于dt。因此,您总是会跳过内部循环并再次重新启动计时器。@B.Roth您是对的,接得好。有时我会对自己的错误感到惊讶:更糟糕的是,海报接受了我的错误,所以我不能删除它!任何阅读本文的人,请不要在这里复制和粘贴我的代码,这里有一个bug。我提交了一个编辑,应该可以修复逻辑,因此如果获得批准,那么未来的观众将能够复制粘贴代码并使其工作。
gameObject.FixedUpdate(dt.TotalMilliSeconds);