2014-01-29 4 views
8

Я использую Monogame Внедрение xna для разработки простой игры Air Hockey в магазине Windows, и я перехожу на какую-либо страницу XAML, если какой-либо из игроков достигает 7 баллов.Как перезапустить класс игры XNA (Monogame)

это логика, я использую в методе Update

protected override void Update(GameTime gameTime) 
     { 
      DrawGame(); 
      if (player1.Score == 7) 
      { 
       try 
       { 
        PlayerOneScore = player1.Score; 
        PlayerTwoScore = player2.Score; 
        App.WinningFlag = true; 
        App.WinningPlayer = PlayerOneName; 
        this.Exit(); 
        if (BaseCount == 0) 
        { 
         //Navigation to next page 
         BaseCount++; 
         Frame ff = new Frame(); 
         ff.Navigate(typeof(NextPage)); 
         Windows.UI.Xaml.Window.Current.Content = ff; 
         Windows.UI.Xaml.Window.Current.Activate(); 
        } 
       } 
       catch (Exception) 
       { 
        throw; 
       } 
      } 
      base.Update(gameTime); 
     } 

Однако я вижу, что обновление методов и рисовать все еще вызывался, почему так? Хотя я написал код, чтобы уйти с этой страницы, а также в СледующаяСтраница есть кнопка закодирована для перезапуска игры

Нажмите событие для кнопки перезапуска игры в СледующаяСтранице

private void btnStartNewGame_Click(object sender, RoutedEventArgs e) 
     { 
      var app = App.Current as App; 
      if (app.GamePage != null) 
      { app.GamePage = null; app.GamePage = new GamePage(string.Empty); } 
      else { app.GamePage = new GamePage(string.Empty); } 
      Window.Current.Content = app.GamePage; 
     } 

Это делает меня черным screen, Никаких текстур в классах game1.cs не нарисованы.

Как я могу перейти с Game1.cs на Xaml и вернуться к Game1.cs в качестве нового вызова?

+1

Вы видите государство XNA Game Управление? – SamLeBarbare

+0

Да, но это не сработало для моей проблемы, так или иначе, проверьте мой ответ. Это сработало для меня. –

ответ

0

У меня есть решение проблемы. Хотя я не знаю, что это правильный/идеальный способ, но он работал для меня, по крайней мере.

код, который я пишу, чтобы вернуться обратно к игре неправильно

Старый и ошибочными

private void btnStartNewGame_Click(object sender, RoutedEventArgs e) 
      { 
       var app = App.Current as App; 
       if (app.GamePage != null) 
       { app.GamePage = null; app.GamePage = new GamePage(string.Empty); } 
       else { app.GamePage = new GamePage(string.Empty); } 
       Window.Current.Content = app.GamePage; 
      } 

Вместо создания экземпляра GamePage каждый раз, когда вы хотите получить доступ к нему, вы создаете его один раз и удерживать ссылку на него в объекте App. Я прилагаю модифицированную версию, а также:

Модифицированный

 private void btnStartNewGame_Click(object sender, RoutedEventArgs e) 
     { 
     var app = App.Current as App; 
     if (app.GamePage != null) 
     Window.Current.Content = app.GamePage; 
     } 

также А link

Это помогло мне, надеюсь, это поможет вам тоже :)

Смежные вопросы