如何重启XNA游戏类(Monogame)

时间:2014-01-29 11:50:55

标签: c# windows-phone-8 xna windows-store-apps monogame

我正在使用xog的Monogame实现在Windows商店中开发一个简单的空气曲棍球游戏,如果任何一个玩家获得7分,我将导航到一些XAML页面

这是我在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);
        }

但是我看到Update和Draw方法仍然被调用,为什么会这样?虽然我已编写代码以离开此页面,但在NextPage中还有一个用于重新启动游戏的按钮

在NextPage中点击按钮重启游戏的事件

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;
        }

这会让我看到黑屏,没有绘制game1.cs类中的纹理。

如何从Game1.cs导航到Xaml并重新回到Game1.cs?

1 个答案:

答案 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时,都不是创建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;
        }

也是A link

这对我有所帮助,希望它也能帮到你:)。