我有一个使用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秒,但它仍然在游戏开始时绘制!
我该如何解决这个问题?我已经在这几个小时了,这让我疯了。我不知道我做错了什么!
答案 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
调用中触发。