在Windows表单用户控件中嵌入XNA游戏

3
我有一个简单的XNA 4.0游戏。我想创建一个Windows窗体用户控件,以渲染此游戏,并将必要的交互反馈(键盘和鼠标)发送回XNA。
我尝试了以下方法:
在XNA中:
- 将XNA的Game.GraphicsDevice重定向到RenderTarget2D。 - 在Update()开始时发送带有KeyboardState和MouseState对象的事件,由Windows Forms填充。
在WinForms中:
- 捕获事件,使用Windows Forms中通常的键盘和鼠标事件获取数据并填充KeyboardState和MouseState对象。 - 在OnPaint中调用Game.RunOnFrame()。 - 从游戏中获取RenderTarget2D(作为纹理)。 - 锁定纹理的数据,并尝试逐像素地绘制到我的用户控件的Graphics上。 - 另一个想法是只调用Game.Run(或一个新线程)并在Game中发送RenderTarget2D的事件。
我遇到了以下问题:
- 如果我调用Game.Run(),我没有隐藏游戏窗口的方法(因为我正在重定向渲染)。 - 必须在不同的线程上调用Game.Run(),因为它启动了一个新的事件循环(它调用Application方法),然后我从不同的线程中绘制我的用户控件(这很糟糕)。 - 使用Color、Vector4甚至Rgba32锁定RenderTarget2D对我来说似乎不起作用(它会显示“结构大小错误”)。
有什么想法吗?
提前感谢。

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

5

2
虽然这理论上回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Bill the Lizard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接