【发布时间】:2010-03-14 21:43:54
【问题描述】:
我正在为基于 2D 瓷砖的游戏制作地图编辑器。我想在 Windows 窗体中托管两个 XNA 控件——第一个渲染地图;第二个渲染图块集。我使用代码here 在Windows 窗体内制作XNA 控制主机。这一切都很好——只要 Windows 窗体内只有一个 XNA 控件。但我需要两个 - 一个用于地图;第二个用于tileset。如何在 Windows 窗体中运行两个 XNA 控件?在谷歌搜索时,我遇到了“交换链”和“多个视口”这些术语,但我无法理解它们,希望得到支持。
顺便说一句,我知道 XNA 控件示例的设计目的是即使您运行 100 个 XNA 控件,它们都将共享同一个 GraphicsDevice - 本质上,所有 100 个 XNA 控件将共享同一个屏幕。我尝试修改代码为每个 XNA 控件实例化一个新的 GraphicsDevice,但其余代码不起作用。代码有点长,所以我不会发布,除非有人需要它来帮助我。
提前致谢。
【问题讨论】:
-
问题中引用的链接确实显示了如何做 OP 说他想做的事情。 (WinForms Series 1 Graphics Device.) 基本代码在 GraphicsDeviceControl.OnCreateControl:
graphicsDeviceService = GraphicsDeviceService.AddRef(Handle, ClientSize.Width, ClientSize.Height);中。在此之后,graphicsDeviceService.GraphicsDevice是绘制到该控件中的 GraphicsDevice。创建其中两个,您就有两个控件可供绘制 - 如示例代码所示。 -
... 如果您不想按原样使用该示例,您只需要对每个控件进行一些引用即可;将
myControl.Handle放在上面的行中以创建一个GraphicsDeviceService,其GraphicsDevice吸引到myControl。 (如果使用 ContentManager,您还需要下一行,services.AddService<IGraphicsDeviceService>(graphicsDeviceService);)。