2013-04-24 69 views
1

我正在创建一个XNA应用程序,我想在开始XNA应用程序之前添加一个Windows窗体,要求他的用户名和密码登录,我创建了所有这些,但是当我运行我的程序时,它会打开XNA直接窗口。请告诉我如何使用Windows Form运行XNA?连接Windows窗体与XNA应用程序

+0

整个游戏是假设在一个窗体中,还是只是想要启动登录程序? – Deukalion 2013-04-24 10:14:37

+0

如果您想获得更多答案,提示可能会将您的问题标记为已回答,如果答案是肯定的,您将获得更多答案。我看到你已经提出了很多问题,但从未标记过答案。另外,我添加了一个例子。如果您希望为您的游戏添加控件,请说出来,我可以给你一个例子说明如何做到这一点相当简单。 – Deukalion 2013-04-24 10:58:30

+0

非常感谢你! :) – 2013-04-26 07:41:11

回答

1

如何在游戏中创建表单取决于您,但在开始游戏之前检查某些内容的最佳方法可能是放入Program.cs文件。

我做的一个例子是这样的:

using System.Windows.Forms; 

static class Program 
{ 
    static void Main(string[] args) 
    { 
     #if WINDOWS 

     if (MessageBox.Show("Do you wish to start?", "Start Game", MessageBoxButtons.YesNo) == DialogResult.Yes) 
     { 
      using (Game1 game = new Game1()) 
      { 
       game.Run(); 
      } 
     } 

     #endif 
    } 
} 

这提示用户有一个问题,如果比赛应该开始。如果您随后使用自己的表单自定义它,而不是检查一些数据并返回有效的DialogResult。如果DialogResult == DialogResult.OK,那么用户是有效的,也许对话框可以存储登录信息,以便游戏可以获得它(如果需要),也许在game.Run()之后做到这一点。

在创建自定义InputDialog时,它非常简单。我有一个动态输入框,我只是为此定制。这个简单的布局这个就变成了:

我登入对话框
using System.Windows.Forms; 

static class Program 
{ 
    static void Main(string[] args) 
    { 
     #if WINDOWS 

     XNASignIn signinDialog = new XNASignIn(); 
     DialogResult result = DialogResult.Abort; 

     while (result == DialogResult.Abort) 
     { 
      result = signinDialog.ShowDialog(); 

      if (result == DialogResult.Abort) 
       MessageBox.Show("You entered the wrong username and password"); 
     } 

     if (result == DialogResult.Cancel) 
      MessageBox.Show("You cancelled the login, the game will exit"); 
     else if (result == DialogResult.OK) 
     { 
      using (Game1 game = new Game1()) 
      { 
       game.Run(); 
      } 
     } 

     #endif 
    } 

完整的源代码:

http://pastebin.com/yVZbtxH8

只需创建一个类,并将其复制在

记得添加引用。为您的XNA项目的System.Windows.Forms。