Winforms 从Windows窗体关闭XNA

Winforms 从Windows窗体关闭XNA,winforms,xna,Winforms,Xna,我有一个游戏在XNA上运行。 为了创建菜单和对话框,我使用windows窗体。 然而,我的主要问题是我的“游戏结束”对话框 当您死亡时,会出现一条消息,询问您是否想再试一次。当您这样做时,它会打开xna的另一个实例(因此您有两个实例正在运行) 当您选择“重试”时,我希望第一个关闭,第二个打开 XNA Game1.cs GameOver gameover = new GameOver(level, levelManager, kills); gameover.Sho

我有一个游戏在XNA上运行。 为了创建菜单和对话框,我使用windows窗体。 然而,我的主要问题是我的“游戏结束”对话框

当您死亡时,会出现一条消息,询问您是否想再试一次。当您这样做时,它会打开xna的另一个实例(因此您有两个实例正在运行)

当您选择“重试”时,我希望第一个关闭,第二个打开

XNA Game1.cs

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