我想在我的XNA游戏中实现一个简单的计数器.认为这很简单.我有以下代码:
elapsed = gameTime.ElapsedGameTime.TotalMilliseconds;
timer -= (int)elapsed;
if (timer <= 0)
{
timer = 10; //Reset Timer
}
Run Code Online (Sandbox Code Playgroud)
但过去从未改变过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
}
}
Run Code Online (Sandbox Code Playgroud)
对不起,我相信原始的代码片段已经足够了.我在网上阅读了一些页面,人们发布了计时器的例子,并使用了我上面使用过的方法.我理解这里提出的一些关于更新速度足够快的评论,以便经过的时间总是为0.
你没有使用正确的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);
}
Run Code Online (Sandbox Code Playgroud)