GameTime始终为0 - MonoGame(XNA) - C#
目前,在那个MonoGame遍历它以相同的速度我精灵循环代码。我想通过使用GameTime创建延迟来减慢这个过程。然而,它从来没有工作,所以我决定,我会使用debug.WriteLine()来检查GameTime是否更新。它没有,永远。GameTime始终为0 - MonoGame(XNA) - C#
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”。
我在做什么错?还是有更好的方法来做到这一点?
你_gameTime
是0
,因为它只是initalized,多数民众赞成它。
你的游戏类(继承自Game
)有一个Update方法,参数类型为GameTime
。该参数是您当前的帧时间。所以,你应该UpdateTimer
也有GameTime
参数,应该在Game.Update
public void UpdateTimer(GameTime gameTime)
{
timer += gameTime.ElapsedGameTime;
Debug.WriteLine("Timer: " + timer.TotalMilliseconds);
}
不要使用'毫秒'!使用'TotalMilliseconds'。每1000毫秒会产生一次“毫秒”(如果在更新之间传递1500毫秒,它将只返回“500”)。 'TotalMilliseconds'会给你上次更新以来的时间,完全以毫秒表示。 –
刚刚从他那里复制,所以是的..我可以修复它。 – DogeAmazed
叫你需要将主gameTime传递给实体。 ex-(Entity._gameTime = gametime)然后它会开始更新。
一般注意:应该(几乎)总是用'Total_'属性('TotalSeconds','TotalMilliseconds',...)用'GameTime'打交道时。 “非总数”方法仅返回该时间的*部分*,而“总计”方法返回以您想要的时间单位表示的整个量程。例如,如果经过1.7秒,“毫秒”将返回“700”,而“TotalMilliseconds”将返回“1700”。 'Seconds'将返回'1',并且'TotalSeconds'将返回'1.7'。通常,使用“普通”属性的唯一时间是当您想要执行特殊格式化或其他非标准格式时。 –
另请注意,您实际上并不需要保留自己的累计计时器,“GameTime”已经为您在['GameTime.TotalGameTime'](https://msdn.microsoft.com/zh-cn/ library/microsoft.xna.framework.gametime.totalgametime.aspx)属性。 –