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

本文关键字:XNA 游戏 控件 Windows 窗体 用户 | 更新日期: 2023-09-27 18:19:29

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

我尝试过以下几种:

在XNA:中

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

  • 在Update()开始时,发出一个事件,发送一个具有KeyboardState和MouseState的对象,由Windows窗体填写

在WinForms:中

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

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

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

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

  • 另一个想法是调用Game.Run()(o一个新线程),并在Game中发出一个事件来发送RenderTarget2D。

我发现了以下问题:

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

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

  • 用Color、Vector4甚至Rgba32锁定RenderTarget2D似乎对我不起作用(它说"结构大小错误")

有什么想法吗?

提前谢谢。

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

xna的网站上有一个关于在winform中嵌入xna的很棒的代码示例。它会带你走过所有的步骤。我为xbox制作游戏,但我将其用于我们为引擎制作的关卡编辑器。

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