游戏时间始终为0-单游戏(XNA)-C#
目前,我的精灵循环的速度与MonoGame循环代码的速度相同。我想通过使用GameTime创建延迟来减缓这个过程。然而,它从来都不起作用,所以我决定使用debug.WriteLine()检查游戏时间是否更新。从来没有游戏时间始终为0-单游戏(XNA)-C#,c#,xna,monogame,xna-4.0,C#,Xna,Monogame,Xna 4.0,目前,我的精灵循环的速度与MonoGame循环代码的速度相同。我想通过使用GameTime创建延迟来减缓这个过程。然而,它从来都不起作用,所以我决定使用debug.WriteLine()检查游戏时间是否更新。从来没有 abstract class Entity { protected GameTime _gameTime; public TimeSpan timer { get; set; } public Entity() { _gameTim
abstract class Entity
{
protected GameTime _gameTime;
public TimeSpan timer { get; set; }
public Entity()
{
_gameTime = new GameTime();
timer = _gameTime.TotalGameTime;
}
public void UpdateTimer()
{
timer += _gameTime.TotalGameTime;
Debug.WriteLine("Timer: " + timer.Milliseconds);
}
}
UpdateTimer()在游戏循环中连续运行,但总是在调试输出中写入“0”
我做错了什么?或者有更好的方法吗?你的
\u游戏时间是0
,因为它只是初始化的,就是这样
您的游戏类(继承自Game
)获得了一个更新方法,参数类型为GameTime
。此参数是您当前的帧时间。所以你的UpdateTimer
也应该有一个GameTime
参数,并且应该在你的游戏中调用。Update
public void UpdateTimer(GameTime gameTime)
{
timer += gameTime.ElapsedGameTime;
Debug.WriteLine("Timer: " + timer.TotalMilliseconds);
}
您需要将主游戏时间传递给实体。例如-(Entity.\u gameTime=gameTime),然后它将开始更新。不要使用毫秒
!使用总毫秒数
<代码>毫秒
waps每1000毫秒一次(如果更新之间通过1500
ms,它将只返回500
)TotalMillistics
将给出自上次更新以来的时间,以毫秒表示。只是从他那里复制了它,所以是的。。我可以解决它。一般说明:在处理游戏时间时,您应该(几乎)始终使用Total
属性(TotalSeconds
,totalmicondises
,…)。“non-Total”方法只返回部分时间,而“Total”方法返回以所需时间单位表示的整个跨度。例如,如果1.7秒过去,毫秒
将返回700
,而总毫秒
将返回1700
Seconds
将返回1
,而TotalSeconds
将返回1.7
。一般来说,使用“普通”属性的唯一时间是在您想要进行特殊格式设置或其他非标准设置时。另外请注意,您实际上不需要保留自己的累积计时器,GameTime
已经在属性中为您做了这些。