我试图写一个固定的时间步。
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秒。
答案 0 :(得分:0)
关于此部分TimeSpan.FromSeconds(1/50)
。 TimeSpan.FromSeconds
接受double
,1/50
为int
(int
/ 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);
}
}