【问题标题】:Win 8 MonoGame - Game resolution vs. screen resolutionWin 8 MonoGame - 游戏分辨率与屏幕分辨率
【发布时间】:2013-06-18 18:35:34
【问题描述】:

我目前正在开发 Win 8 Windows Store 游戏(Monogame,C#)。我将 graphics.PreferedBackBuffers 设置为 1366x768。我主要用于开发的笔记本电脑不支持此分辨率,外接显示器也不支持此分辨率,但是一切都很好地缩放,因此精灵在不同的显示器上被压缩或拉伸(如果游戏被拖动到运行时的另一个监视器)。 我需要使用鼠标来拖动游戏对象,但我注意到鼠标光标在显示器分辨率下工作,所以这样做:

 if(objectSprite.BoundingBox.Contains((int)mouseCursos.x, (int)mouseCursos.Y))
 {
        objectSprite.isHooked = true;
 }

不起作用,因为鼠标的坐标总是与游戏对象的坐标不同。如何获得当前显示器的最大分辨率,以便能够缩放坐标。

请注意 GraphicsAdapter.DefaultAdapter.CurrentDisplayMode 返回 800x600。

【问题讨论】:

    标签: c# windows-8 windows-store-apps monogame resolutions


    【解决方案1】:

    由于 Metro 应用程序默认情况下通常是全屏的(尽管它们也可以被捕捉),因此您可以使用 Window 类中的以下属性:

    Window.ClientBounds.Width
    Window.ClientBounds.Height
    

    希望对您有所帮助。

    【讨论】:

    • 是的,非常感谢。但是我使用了 Window.ClientBounds.Height/Width,因为在我的应用程序中 Window 没有 Current 属性,但你肯定让我朝着正确的方向前进。
    • 这很酷。这有点奇怪,因为根据 MSDN 文档,它说“当前”是 Windows 应用商店类型应用程序的可用属性。 msdn.microsoft.com/en-us/library/windows/apps/…
    • 我收回了。 “当前”在 Win8 应用程序的非 Windows 应用商店版本中可用。我误读了文档。我会在上面更新我的答案。
    【解决方案2】:

    在我的 MonoGame Windows Store 应用 ClientBounds 不知何故不存在,Window.Current 不知何故为空,所以我使用这种方法:

                CoreApplicationView v = Windows.ApplicationModel.Core.CoreApplication.MainView;
            var bounds = v.CoreWindow.Bounds;
            double w = bounds.Width;
            double h = bounds.Height;
            switch (DisplayProperties.ResolutionScale)
            {
                case ResolutionScale.Scale140Percent:
                    w = Math.Round(w * 1.4);
                    h = Math.Round(h * 1.4);
                    break;
                case ResolutionScale.Scale180Percent:
                    w = Math.Round(w * 1.8);
                    h = Math.Round(h * 1.8);
                    break;
            }
            ScreenSize resolution = new ScreenSize(w, h);
            if (ApplicationView.Value == ApplicationViewState.FullScreenLandscape)
                resolution = new ScreenSize(w, h);
            else if (ApplicationView.Value == ApplicationViewState.FullScreenPortrait)
            {
                resolution = new ScreenSize(h, w);
            }
            else if (ApplicationView.Value == ApplicationViewState.Filled)
            {
                resolution = new ScreenSize(w + 320.0 + 22.0, h); //snapped mode grip
            }
    

    【讨论】:

      猜你喜欢
      • 2016-06-28
      • 1970-01-01
      • 2020-06-09
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      相关资源
      最近更新 更多