繁体   English   中英

如何重新启动XNA游戏类(Monogame)

[英]How to restart XNA game class (Monogame)

我正在使用xna的Monogame Implementation来在Windows Store中开发一个简单的Air Hockey游戏,如果有任何一个玩家的得分达到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中的按钮重启游戏的Click事件

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?

我找到了解决问题的办法。 虽然我不知道这是正确/理想的方式,但它至少对我有用。

我编写的导航回到游戏的代码是错误的

古老而错误

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

也是一个链接

这对我有帮助,希望对您也有帮助:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM