XNA经过的时间没有更新

时间:2013-02-05 19:12:18

标签: c# xna

我正试图在我的XNA游戏中实现一个简单的计数器。认为这很简单。我有以下代码:

    elapsed = gameTime.ElapsedGameTime.TotalMilliseconds;
        timer -= (int)elapsed;

        if (timer <= 0)
        {
            timer = 10;   //Reset Timer
        }

但过去的时间永远不会从0.0变化。我错过了一些明显的东西吗?我怀疑我。我将gameTime声明在顶部并像往常一样初始化。

如上所述,这里有更多代码:

公共类Game1:Microsoft.Xna.Framework.Game   {

private GameTime zombieTime; 



    public Game1()
    {
        zombieTime = new GameTime();
        // Other (unrelated) stuff here
    }



    protected void AddZombie()
    {
        elapsed = zombieTime.ElapsedGameTime.TotalMilliseconds;
        timer -= (int)elapsed;

        if (timer <= 0)
        {
            timer = 10;   //Reset Timer
            Zombie zombie = new Zombie(ScreenWidth, ScreenHeight, random);
            zombie.LoadContent(this.Content, "ZombieSprites/ZombieLeft1");
            zombies.Insert(0, zombie);
        }
     }

    protected void Update()
    {
        AddZombie();
        // Other game update stuff here
    }
}

对不起,我相信原始的代码段已经足够了。我在网上阅读了一些页面,人们发布了计时器的例子,并使用了我上面使用过的方法。我理解这里提出的一些关于更新速度足够快的评论,以便经过的时间总是为0.

2 个答案:

答案 0 :(得分:5)

你没有使用正确的GameTime。 zombieTime永远不会被任何东西更新,因此它总是会被清零。您想要使用的GameTime已经传递给Update()函数。

正确的方法是:

protected void AddZombie(GameTime gameTime)
{
    float elapsed = gameTime.ElapsedGameTime.TotalMilliseconds;
    timer -= (int)elapsed;

    if (timer <= 0)
    {
        timer = 10;   //Reset Timer
        // Rest of stuff goes here
    }
}

protected void Update(GameTime gameTime)
{
    AddZombie(gameTime);
}

答案 1 :(得分:2)

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.gametime_members.aspx

经过的游戏时间是自上次更新以来的时间。累计游戏时间中的总游戏时间......

所以,除非你做了很多你没有表现出来的工作,否则你将毫不犹豫地更新,所以0的值是非常明智的

尝试在那里推迟睡眠陈述,看看是否经过了一段时间。