当我想要它时,炸弹不会被放置

时间:2013-06-25 18:12:09

标签: c# .net windows-phone-7 xna windows-phone-8

我有一个使用XNA / C#为Windows手机制作的游戏,现在我决定去添加炸弹来帮助玩家。

现在我已经设置了一个计时器和一个bool,因此每个级别只能使用1个炸弹。

但是,一旦游戏开启,炸弹就已存在!我认为计时器不起作用。

bool canDrawBomb = false;


public static Texture2D bomb;
GameTimer bombTimer = new GameTimer();

protected override void Initialize()
{

    // Bomb timer.
    bombTimer.UpdateInterval.Add(new TimeSpan(50000));
    bombTimer.Update += bombTimer_Update;
    bombTimer.Start();

    base.Initialize();
}

void bombTimer_Update(object sender, GameTimerEventArgs e)
{
    canDrawBomb = true;
    bombTimer.Stop();
}

protected override void LoadContent()
{

    bomb = Content.Load<Texture2D>("Bomb");
}

protected override void Draw(GameTime gameTime)
{

        if (canDrawBomb)
        {
            // Draw the bomb.
            // TESTED: OK. The bomb can draw but not at right time.
            spriteBatch.Draw(bomb, new Vector2(), Color.White);
        }
}

现在的问题是,尽管我已经将炸弹测试器设置为50秒,但它仍然在游戏开始时绘制!

我该如何解决这个问题?我已经在这几个小时了,这让我疯了。我不知道我做错了什么!

2 个答案:

答案 0 :(得分:3)

以下行将更改interval属性(因为TimeSpan.Add()方法创建了一个新副本,它不会更改现有的TimeSpan):

  bombTimer.UpdateInterval.Add(new TimeSpan(50000));

只需使用

  bombTimer.UpdateInterval = new TimeSpan(50000);

答案 1 :(得分:1)

我怀疑GameTimer.Uartate事件在调用GameTimer.Start()后立即触发。添加计数器变量,并在第二次调用时仅将canDrawBomb设置为false(并且仅在第二次调用时禁用计时器)

如果在XNA中可用,则使用DispatcherTimer,这绝对不会在Start调用中触发。