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