2013-06-25 4 views
0

У меня есть игра, которую я сделал для телефона с Windows, используя XNA/C#, и теперь я решил пойти и добавить Бомбу, чтобы помочь игроку.Бомба не помещается, когда я хочу ее

Теперь у меня есть таймер и 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); 
     } 
} 

Теперь проблема заключается в том, что даже если я поставил bombTimer ах 50 секунд, она по-прежнему привлекает в самом начале игры!

Как это исправить? Я был в этом часами, и это сводит меня с ума. Я не знаю, что я делаю неправильно!

+8

это есть NSA, написанные во всем этом – Jonesopolis

+0

И что такое NSA? –

+0

Название и ваше описание подразумевают две разные вещи. – PoweredByOrange

ответ

1

Я подозреваю, что событие GameTimer.Update запускается, как только вызывается GameTimer.Start(). Добавить переменную-счетчик и установить только canDrawBomb ложь на второй вызов (и equaly только отключить таймер на второй вызов)

Или использовать DispatcherTimer, если таковой имеется в XNA, который, безусловно, не срабатывает на Start вызова ,

+0

Хорошо, я добавил 'int', который увеличивается каждый раз, когда запускается Update, и если значение int is> = 3, я устанавливаю canDrawBomb в true. Но он все еще рисует бомбу в начале игры. –

+0

Я закончил тем, что не использовал таймер, но я собираюсь продолжать его, потому что в какой-то момент я в конце концов стану таймером. Я закончил тем, что нарисовал бомбу, когда враги в значительной степени окружили игрока, а счет игрока - на четверть или меньше, чем у их предыдущего рекордного уровня. –

3

Следующая строка будет не изменить свойство интервала (так как метод TimeSpan.Add() делает новую копию, он не изменяет существующий TimeSpan):

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

просто использовать

bombTimer.UpdateInterval = new TimeSpan(50000); 
+0

о, как я мог пропустить это ..... –

+0

Вздох. Мне еще многое предстоит узнать. Нам нужна технология наноботов; Я становлюсь нетерпеливым. Спасибо @HenkH :) _Edit_: Он по-прежнему делает то же самое: -/ –

+1

Для справки о свойстве UpdateInterval: http: // msdn.microsoft.com/en-us/library/microsoft.xna.framework.gametimer.updateinterval.aspx – RavB