首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在两台分辨率不同的显示器上运行Windows 8应用程序XNA

在两台分辨率不同的显示器上运行Windows 8应用程序XNA
EN

Stack Overflow用户
提问于 2013-02-01 05:14:33
回答 2查看 431关注 0票数 1

我正在使用Monogame为Windows 8应用商店编写一个XNA游戏。我还使用一台连接到外部显示器的笔记本电脑。当然,我的外接显示器的分辨率比我笔记本电脑的屏幕要高得多。当我将应用程序从一个屏幕拖到另一个屏幕时,视口上的分辨率发生了变化。

在我的构造函数中,我使用

代码语言:javascript
复制
 _graphics = new GraphicsDeviceManager(this);
 _graphics.PreferredBackBufferHeight = 768;
 _graphics.PreferredBackBufferWidth = 1366;

来设置我的视口分辨率。这使得应用程序在任一显示器上运行时都能正常工作,但是将应用程序从一个显示器拖到另一个显示器会改变GraphicsDeviceManager上的分辨率。有什么办法可以防止这种变化吗?

EN

回答 2

Stack Overflow用户

发布于 2013-02-01 05:35:20

所以我想通了

首先,我编写了一个方法,用于检查图形设备上的端口分辨率是否已更改

代码语言:javascript
复制
 private bool hasResolutionChanegd()
    {
        if ((GraphicsDevice.Viewport.Width != ScreenManager.Instance.ScreenWidth) || (GraphicsDevice.Viewport.Height != ScreenManager.Instance.ScreenHeight))
        {
            return true;
        }
        else
        {
           return false;
        }

    }

我在每次更新时都调用此方法。

代码语言:javascript
复制
if (hasResolutionChanegd())
        {
             Debug.WriteLine("Resolution Change new width= " + GraphicsDevice.Viewport.Width +" new height="+ GraphicsDevice.Viewport.Height);

            _graphics.PreferredBackBufferHeight = 768;
            _graphics.PreferredBackBufferWidth = 1366;
            _graphics.ApplyChanges();
        }

这样,每次在图形设备管理器上更改分辨率时(当用户将应用程序从一个屏幕环境拖动到另一个屏幕环境时),就会强制执行首选的分辨率。

票数 1
EN

Stack Overflow用户

发布于 2014-01-07 04:13:37

我得到了与原始海报相同的东西,但使用的是XNA,而不是MonoGame。当我在两个监视器之间拖动窗口时,分辨率会改变,但(当然)不会触发ClientSizeChanged事件。文档中说,上面关于使用SizeChanged事件的建议很有帮助,但只适用于Windows8。

我似乎已经通过处理Window.ScreenDeviceNameChanged事件修复了它--我把它挂接到了与ClientSizeChanged相同的处理程序上。

我本想把这篇文章作为评论放在原文中,但我没有足够的“声誉”积分让系统允许我这么做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14635279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档