MonoGame 3.4 Windows Phone 8.1 - 虚拟hw按钮下的视口渲染

时间:2015-07-29 09:44:18

标签: c# windows-phone-8.1 screen-resolution monogame

我正在为Windows和Windows Phone 8.1开发游戏。游戏运行在800x480,这是在游戏类构造函数中设置的:

graphics = new GraphicsDeviceManager(this);
graphics.PreferredBackBufferHeight = 480;
graphics.PreferredBackBufferWidth = 800;

就像PC上的魅力一样,当我在带有虚拟按钮且实际分辨率为854x480的诺基亚630上运行游戏时,视口会在虚拟按钮下呈现。

如果我尝试从spriteBatchgraphics或直接GraphicsDevice类获得实际分辨率,我总是得到800x480,而很明显真正的分辨率更大(在PC上,我能够发现显示器是在1920x1080)。

为了澄清,我目前有一个非常简单的Draw方法,没有任何其他分辨率或视口变化:

GraphicsDevice.Clear(oc.colBack);
spriteBatch.Begin();
foreach (Mob mobUnit in oc.mob) {
    spriteBatch.Draw(sprSquare, mobUnit.position, origin: mobUnit.size / 2, color: oc.colMob * 0.8f);
}
spriteBatch.End();
base.Draw(gameTime);

任何想法如何解决这个问题? 感谢。

PS:状态栏没有显示,也没有将视口“推”到一边。

1 个答案:

答案 0 :(得分:0)

经过一些深入的研究和计算后,我提出了一个相当愚蠢的解决方法。在newdata <- filter(data, data$column == list) 方法中:

Initialize

matScale = Matrix.CreateScale(1f, 1f, 1f); if (Window.ClientBounds.Width < Window.ClientBounds.Height) { var dpiY = Windows.Graphics.Display.DisplayInformation.GetForCurrentView().RawDpiY; var dpiX = Windows.Graphics.Display.DisplayInformation.GetForCurrentView().RawDpiX; if (dpiY < dpiX - 1) { matScale = Matrix.CreateScale(.937f,1f,1f); } } 是因为我实际上在PC上的DPI之间有1px的差异 - 尽管PC不应该清除第一个if语句。 DpiX - 1是800px减去虚拟按钮大小的百分比,大约为50px。 (当屏幕尺寸为854px时,它为54px,因此大约占屏幕的6.323%。)

当然,在.937f

Draw

这很有效。我会打开这个问题,因为我认为这不是正确的方法。如果只有spriteBatch.Begin(transformMatrix: matScale); 实际的所有记录方法都那么......