0

我目前正在开发 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。

4

2 回答 2

1

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

Window.ClientBounds.Width
Window.ClientBounds.Height

希望有帮助。

于 2013-06-18T18:53:39.513 回答
0

在我的 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
        }
于 2014-02-28T18:15:26.227 回答