紫衫龙王扮演者:在winform中写Xna游戏

来源:百度文库 编辑:中财网 时间:2024/04/29 04:39:55
步骤如下:1、在XNA项目中添加一个winform窗体,命名为FormXna;2、在Windows窗体中增加一个Panel这个假定Panel名为panelXna。   在FormXna中添加命名空间:using Microsoft.Xna.Framework;3、在FormXna代码中写如下代码:public IntPtr getDrawSurface() //获取panelXna的句柄
{     return panelXna.Handle;}4、为了不使显示变形我们还需要在FormXna代码中写入下方法:public Vector2 getDrawSize() //获取绘制尺寸{     return new Vector2(panelXna.Width,panelXna.Height);}
5、现在我们回到MainGame中,添加如下两个变量:private IntPtr drawSurface;private Vector2 drawSize;
6、然后,我们需要更改一下MainGame的构造函数的输入参数,更改后代码如下:public MainGame(IntPtr drawSurface,Vector2 size)
  在该构造中添加如下代码:this.drawSurface = drawSurface;this.drawSize = size;graphics.PreparingDeviceSettings += new EventHandler(graphics_PreparingDeviceSettings);System.Windows.Forms.Control.FromHandle((this.Window.Handle)).VisibleChanged += new EventHandler(MainGame_VisibleChanged);
7、好了,我们已经将drawSurface和drawSize赋值。但是,很显然没有graphics_PreparingDeviceSettings以及MainGame_VisibleChanged这两个处理事件的方法,所以我们要进行添加:void graphics_PreparingDeviceSettings(object sender,PreparingDeviceSettingsEventArgs e){//设置控制句柄e.GraphicsDeviceInformation.PresentationParameters.DeviceWindowHandle = drawSurface;
//设置宽度e.GraphicsDeviceInformation.PresentationParameters.BackBufferWidth = (int)drawSize.X;
//设置高度e.GraphicsDeviceInformation.PresentationParameters.BackBufferHeight = (int)drawSize.Y;} private void MainGame_VisibleChanged(object sender, EventArgs e){     if (System.Windows.Forms.Control.FromHandle((this.Window.Handle)).Visible == true)        System.Windows.Forms.Control.FromHandle((this.Window.Handle)).Visible = false;}8、但是呢,现在运行只会出错。我们还需要在Program类中将Main入口进行更改://不加此句亦可运行,但是必须在没有ActiveX控件的情况下[STAThread]static void Main(string[] args){      FormXna form = new FormXna();      form.Show();      MainGame game = new MainGame(form.getDrawSurface(), form.getDrawSize());      game.Run();}