2017-10-12 136 views
1

目前,在那个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”。

我在做什么错?还是有更好的方法来做到这一点?

+2

一般注意:应该(几乎)总是用'Total_'属性('TotalSeconds','TotalMilliseconds',...)用'GameTime'打交道时。 “非总数”方法仅返回该时间的*部分*,而“总计”方法返回以您想要的时间单位表示的整个量程。例如,如果经过1.7秒,“毫秒”将返回“700”,而“TotalMilliseconds”将返回“1700”。 'Seconds'将返回'1',并且'TotalSeconds'将返回'1.7'。通常,使用“普通”属性的唯一时间是当您想要执行特殊格式化或其他非标准格式时。 –

+1

另请注意,您实际上并不需要保留自己的累计计时器,“GameTime”已经为您在['GameTime.TotalGameTime'](https://msdn.microsoft.com/zh-cn/ library/microsoft.xna.framework.gametime.totalgametime.aspx)属性。 –

回答

2

_gameTime0,因为它只是initalized,多数民众赞成它。

你的游戏类(继承自Game)有一个Update方法,参数类型为GameTime。该参数是您当前的帧时间。所以,你应该UpdateTimer也有GameTime参数,应该在Game.Update

public void UpdateTimer(GameTime gameTime) 
{ 
    timer += gameTime.ElapsedGameTime; 
    Debug.WriteLine("Timer: " + timer.TotalMilliseconds); 
} 
+1

不要使用'毫秒'!使用'TotalMilliseconds'。每1000毫秒会产生一次“毫秒”(如果在更新之间传递1500毫秒,它将只返回“500”)。 'TotalMilliseconds'会给你上次更新以来的时间,完全以毫秒表示。 –

+1

刚刚从他那里复制,所以是的..我可以修复它。 – DogeAmazed

1

叫你需要将主gameTime传递给实体。 ex-(Entity._gameTime = gametime)然后它会开始更新。