赢得8个MonoGame - 游戏分辨率与屏幕分辨率

时间:2013-06-18 18:35:34

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

由于Metro应用程序默认情况下通常是全屏的(虽然它们也可以快照),您可以使用Window类中的以下属性:

Window.ClientBounds.Width
Window.ClientBounds.Height

希望有所帮助。

答案 1 :(得分:0)

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

            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
        }