[英]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.