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
由于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
}