Winforms 从Windows窗体关闭XNA
我有一个游戏在XNA上运行。 为了创建菜单和对话框,我使用windows窗体。 然而,我的主要问题是我的“游戏结束”对话框 当您死亡时,会出现一条消息,询问您是否想再试一次。当您这样做时,它会打开xna的另一个实例(因此您有两个实例正在运行) 当您选择“重试”时,我希望第一个关闭,第二个打开 XNA Game1.csWinforms 从Windows窗体关闭XNA,winforms,xna,Winforms,Xna,我有一个游戏在XNA上运行。 为了创建菜单和对话框,我使用windows窗体。 然而,我的主要问题是我的“游戏结束”对话框 当您死亡时,会出现一条消息,询问您是否想再试一次。当您这样做时,它会打开xna的另一个实例(因此您有两个实例正在运行) 当您选择“重试”时,我希望第一个关闭,第二个打开 XNA Game1.cs GameOver gameover = new GameOver(level, levelManager, kills); gameover.Sho
GameOver gameover = new GameOver(level, levelManager, kills);
gameover.ShowDialog();
this.Exit();
“GameOver”是显示游戏统计信息的windows窗体的名称。
(以用户所在的级别开始游戏)
GameOver.cs(Windows窗体)
非常感谢您的帮助 我来总结一下: 您需要编写一个重置方法来重置游戏窗口。您可以通过获取contractor中的所有代码,并将它们放在另一个方法中,然后在构造函数和重置方法中调用该方法来实现。确保复位时没有留下任何东西。需要初始化的任何成员或连接
您也可以打开新窗口并关闭当前窗口,但这不是正确的做法为什么不在同一窗口中开始新一轮?我认为这是预期的行为。另外,关闭最后一个窗口有什么问题?在按钮1的末尾添加Dispose()_Click@lucius抱歉,如果这看起来很基本…但我该怎么做呢?基本上你只需要重置游戏状态并跳回开始,而不会真正退出游戏循环。很难说这对你的具体案例会起什么作用。谢谢你的回答@lucius It now all works:)啊,太好了!好主意。我在Game1中创建了一个名为“reset”的公共方法,该方法调用Initlialise和Load方法。然后我从windows窗体调用它,它完美地重置了所有内容。谢谢
private void button1_Click(object sender, EventArgs e)
{
Visible = false;
Thread thread = new Thread(() =>
{
Game1 game = new Game1(level);
game.Run();
});
thread.Start();
thread.Join();
}