【问题标题】:Embeding a XNA Game in a Windows Form User Control在 Windows 窗体用户控件中嵌入 XNA 游戏
【发布时间】:2012-01-05 18:13:00
【问题描述】:

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

我尝试了以下方法:

在 XNA 中:

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

  • 在 Update() 的开头发送一个事件,发送一个带有 KeyboardState 和 MouseState 的对象以由 Windows 窗体填充

在 WinForms 中:

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

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

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

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

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

我发现了以下问题:

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

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

  • 使用 Color、Vector4 甚至 Rgba32 锁定 RenderTarget2D 似乎对我不起作用(它显示“结构大小错误”)

有什么想法吗?

提前致谢。

【问题讨论】:

  • 愚蠢的问题 - 你为什么要这样做?
  • 我认为本教程和代码示例完全涵盖了您想要做的事情:create.msdn.com/en-US/education/catalog/sample/…
  • @RQDQ 我认为这是一个没有经过深思熟虑的评论。我能想到您可能希望在 winform 中嵌入 xna 游戏的一个原因:创建关卡编辑器。
  • @annonymously - 在理解了基本目标之后,我实际上能够更好地回答问题。如果 OP 确实想要创建关卡编辑器,那将是有用的信息。

标签: c# winforms graphics xna


【解决方案1】:

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

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

【讨论】:

  • 非常感谢,真的很有帮助。
  • 虽然理论上可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
相关资源
最近更新 更多