我应该如何在Windows 7上的XNA中自动支持单监视器或双监视器

本文关键字:监视器 支持 XNA Windows 上的 我应该 | 更新日期: 2023-09-27 17:59:24

我正在使用Microsoft XNA创建一个游戏应用程序,该应用程序将在一个带有笔记本电脑屏幕(Windows 7)控件的公共屏幕(投影仪)上运行。)当第二个显示器不可用时,我希望只在笔记本电脑屏幕上显示公共屏幕。屏幕的比例将是相同的。

有没有一个库可以让我们自动完成,或者最坏的情况下通过更改设置来完成?

我应该如何在Windows 7上的XNA中自动支持单监视器或双监视器

检查是否有两个监视器可用于GraphicsAdapter.Adapters.Count()

如果有,请创建另一个窗体,并将其设置为第二个监视器(投影仪)。然后,对于每一帧,将面向公众的界面渲染到次要监视器上,并将控件绘制到主要监视器上。

要在表单之间切换,只需交换句柄:

graphics.GraphicsDevice.Present(form1.Handle);

否则,只面向公众。

有关如何将WinForms与XNA一起使用的信息,请访问http://create.msdn.com/en-US/education/catalog/sample/winforms_series_1

这个解决方案假设两件事:

  • 主显示器设置为笔记本电脑的显示器,第二个显示器设置为扩展(而不是镜像)
  • 您正在通过WinForms使用XNA

我能想到的最好的方法是创建一个渲染服务器和一个客户端应用程序。

您可以让渲染服务器对两个单独的RenderTarget2D(或主屏幕,然后在渲染目标上)执行所有实际渲染,然后将一个渲染目标传输到客户端以渲染到辅助屏幕。这意味着客户端应用程序是超轻量级的,并且只涉及将纹理渲染到全屏。

将数据传输到客户端应用程序可以通过多种方式完成,但在这种情况下,我个人最喜欢的是使用内存映射文件将rendertarget的字节数据传输到第二个。否则,应该使用tcp通信来提高性能。如果你需要提取字节数据或转移到其他应用程序的信息,只需在我的帖子上发表评论。