在Windows窗体用户控件中嵌入XNA游戏

时间:2012-01-05 18:13:00

标签: c# winforms graphics xna

我写了一个简单的XNA 4.0游戏。我想创建一个Windows窗体用户控件来渲染这个游戏,并提供必要的交互反馈(键盘和鼠标)回XNA。

我尝试了以下内容:

在XNA中:

  • 将XNA的Game.GraphicsDevice重定向到RenderTarget2D。

  • 发送一个事件,发送一个具有KeyboardState和MouseState的对象,由Windows Forms填写,在Update()的开头

在WinForms中:

  • 捕获事件,使用Windows窗体中常用的键盘和鼠标事件获取的数据填充KeyboardState和MouseState。

  • 在OnPaint上,调用Game.RunOnFrame()

  • 从游戏中获取RenderTarget2D(作为纹理)。

  • 锁定纹理的数据,并尝试在我的用户控件的图形中逐个像素地绘制它。

  • 另一个想法就是调用Game.Run()(一个新线程)并在游戏中发出一个发送RenderTarget2D的事件。

我发现了以下问题:

  • 如果我调用Game.Run(),我无法隐藏游戏的窗口(显示为黑色,因为我正在重定向渲染)

  • Game.Run()必须在不同的线程上调用,因为它启动一个新的事件循环(它调用Application方法),然后我在我的用户控件中从一个不同的线程绘制它创建它(坏,坏)

  • 使用Color,Vector4甚至Rgba32锁定RenderTarget2D对我来说似乎不起作用(它表示'结构尺寸错误')

有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:5)

在xna的网站上有一个很好的代码示例,关于在winform中嵌入xna。它将指导您完成所有步骤。我为xbox制作游戏,但是我将它用于我们为引擎制作的关卡编辑器。

http://xbox.create.msdn.com/en-US/education/catalog/sample/winforms_series_1