1

我想创建一个由多个面板组成的(WinForms)应用程序。对于每个面板,我希望能够分配一个 .dll 文件:

例子

这些 .dll 文件应包含应呈现到相应面板中的 XNA 游戏。

我可以加载这些游戏

var game = (Game)Activator.CreateInstance(System.Reflection.Assembly.LoadFrom(path).GetTypes()
    .First(t => t.IsSubclassOf(typeof(Game))));

现在,我不能使用game.Run(),因为它会启动第二个消息循环。

启动一个新线程也会失败,因为InvalidOperationExceptions 涉及从另一个线程访问控件。

我在网上找到的教程只能处理我自己编写的游戏并将其包含在主应用程序中,但我希望能够添加其他游戏,类似于插件。

如何让我的 WinForms 应用程序渲染那些 XNA 游戏,或者有更好的解决方案吗?

4

1 回答 1

1

我过去做过类似的事情,但我使用的是DrawableGameComponents,而不是多个 XNA 项目。您可能要考虑改用这条路线。本质上,您将能够从同一个二进制文件中调用各种 Draw() 函数。

然后在您的表单中,您可以创建一个指向 Panel Handle 的指针,这将用作向图形渲染器指示在何处绘制场景的一种方式:

IntPtr panel1Handle;                
IntPtr panel2Handle;
IntPtr panel3Handle;
panel1Handle = Panel1.Handle;
panel2Handle = Panel2.Handle;
panel3Handle = Panel3.Handle;

然后,在您各自的 DrawableGameComponent.Draw() 调用中,在进行实际绘图之前设置您要绘制的区域:

GraphicsDevice.Present(panel1Handle);
于 2013-06-17T16:04:18.033 回答