2012-01-05 47 views
3

我有一个简单的XNA 4.0游戏编写。我想创建一个Windows Form用户控件来渲染这个游戏,并将必要的交互反馈(键盘和鼠标)提供给XNA。在Windows窗体用户控件中嵌入XNA游戏

我曾尝试以下:

在XNA:

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

  • 发出事件发送带有KeyboardState和MouseState的目的是通过Windows窗体填写,在更新()

的开始的WinForms:

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

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

  • 获取从游戏RenderTarget2D(如纹理)。

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

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

我发现了以下问题:

  • 如果我叫Game.Run()我没有办法隐藏游戏窗口(这似乎黑色,因为我重定向渲染)

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

  • 锁定的色彩搭配,一个的Vector4 RenderTarget2D,甚至RGBA32似乎并不为我工作(它说:“错了结构尺寸”)

任何想法?

在此先感谢。

+1

愚蠢的问题 - 你为什么要这么做? – RQDQ 2012-01-05 18:25:10

+1

我认为本教程和代码示例完全涵盖了您想要执行的操作:http://create.msdn。com/en-US/education/catalog/sample/winforms_series_1 – 2012-01-05 18:57:51

+1

@RQDQ我认为这是一篇不太深思熟虑的评论。我可以想出一个你可能希望在winform中嵌入xna游戏的原因:创建关卡编辑器。 – annonymously 2012-01-05 21:44:51

回答

5

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

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

+0

非常感谢,真的很有帮助。 – 2012-04-04 19:46:02

+2

虽然这可能在理论上回答这个问题,[这将是更可取的](http://meta.stackexchange.com/q/8259)在这里包括答案的基本部分,并提供参考链接。 – 2013-01-19 14:21:28