我正在为Windows和Windows Phone 8.1开发游戏。游戏运行在800x480,这是在游戏类构造函数中设置的:
graphics = new GraphicsDeviceManager(this);
graphics.PreferredBackBufferHeight = 480;
graphics.PreferredBackBufferWidth = 800;
就像PC上的魅力一样,当我在带有虚拟按钮且实际分辨率为854x480的诺基亚630上运行游戏时,视口会在虚拟按钮下呈现。
如果我尝试从spriteBatch
或graphics
或直接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:状态栏没有显示,也没有将视口“推”到一边。
答案 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);
实际的所有记录方法都那么......