Win 8一夫一妻制-游戏分辨率vs屏幕分辨率

本文关键字:分辨率 vs 屏幕 游戏 一夫一妻制 Win | 更新日期: 2023-09-27 18:19:06

我目前正在制作一款Win 8 Windows Store游戏(《Monogame》,c#)。我设置了图形。prefereredbackbuffers设置为1366x768。我主要用于开发的笔记本电脑不支持这个分辨率,也不支持连接到它的外部显示器,但是所有东西都被很好地缩放,所以精灵在不同的显示器上被压缩或拉伸(如果游戏在运行时被拖到另一个显示器上,这就不适用了)。我需要使用鼠标拖动游戏对象,但我注意到鼠标光标在显示器分辨率下工作,所以我可以这样做:

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

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

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

Win 8一夫一妻制-游戏分辨率vs屏幕分辨率

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

Window.ClientBounds.Width
Window.ClientBounds.Height

希望对你有帮助。

在我的MonoGame Windows Store应用程序ClientBounds不知怎么不存在,窗口。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
        }