我正在使用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?
答案 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
这对我有所帮助,希望它也能帮到你:)。