XNA运行时间不会';t更新

本文关键字:更新 运行时间 XNA | 更新日期: 2023-09-27 17:57:42

我正试图在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。

XNA运行时间不会';t更新

您没有使用正确的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);
}

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

游戏运行时间是自上次更新以来的时间。累计游戏时间中的总游戏时间。。。

所以,除非你做了很多没有显示的工作,否则你根本不会花时间更新,所以0的值是非常合理的

试着把睡眠声明塞进去,看看经过的时间是否增加了。