Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Windows窗体用户控件中嵌入XNA游戏_C#_Winforms_Graphics_Xna - Fatal编程技术网

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

C# 在Windows窗体用户控件中嵌入XNA游戏,c#,winforms,graphics,xna,C#,Winforms,Graphics,Xna,我写了一个简单的XNA4.0游戏。我想制作一个Windows窗体用户控件来渲染这个游戏,并向XNA提供必要的交互反馈(键盘和鼠标) 我尝试了以下方法: 在新华社: 将XNA的Game.GraphicsDevice重定向到RenderTarget2D 在Update()开始时,发出一个事件,发送一个带有KeyboardState和MouseState的对象,由Windows窗体填写 在WinForms中: 捕获事件,用Windows窗体中常用的键盘和鼠标事件获得的数据填充KeyboardSt

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

我尝试了以下方法:

在新华社:

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

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

在WinForms中:

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

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

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

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

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

我发现了以下问题:

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

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

  • 用颜色、矢量4甚至Rgba32锁定RenderTarget2D似乎对我不起作用(它说“结构大小错误”)

有什么想法吗


提前感谢。

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


愚蠢的问题-你为什么要这样做?我认为本教程和代码示例正好涵盖了你想要做的事情:@RQDQ我认为这不是一个深思熟虑的评论。我能想到一个你想在winform中嵌入xna游戏的原因:创建一个关卡编辑器。@annonymous-在理解了基本目标之后,我实际上能够更好地回答问题。如果OP确实想要创建一个关卡编辑器,这将是非常有用的信息。非常感谢,非常有用。虽然这可以从理论上回答这个问题,但请在此处包含答案的基本部分,并提供链接供参考。