Windows phone 7 如何在WP8 720p设备上纠正Windows Phone XNA游戏的触摸屏偏移错误?
在WP8 720p设备上运行的XNA应用程序(WP7或WP7.5应用程序)将自动进行字母装箱,以便480x800 BackBuffer大小保持不变(我认为是为了兼容性) 这很好,只是XNA兼容层中似乎有一个bug。触摸面板根据顶部信箱空白区域的大小报告关闭的触摸位置 这有两个问题:Windows phone 7 如何在WP8 720p设备上纠正Windows Phone XNA游戏的触摸屏偏移错误?,windows-phone-7,xna,Windows Phone 7,Xna,在WP8 720p设备上运行的XNA应用程序(WP7或WP7.5应用程序)将自动进行字母装箱,以便480x800 BackBuffer大小保持不变(我认为是为了兼容性) 这很好,只是XNA兼容层中似乎有一个bug。触摸面板根据顶部信箱空白区域的大小报告关闭的触摸位置 这有两个问题: 用户的触摸将似乎关闭,使游戏和菜单导航变得困难 因为它在负方向关闭,用户将根本无法触摸屏幕底部的东西 我试着通过将53/2像素偏移分解来解决这个问题(53是缩放坐标中额外空间的总量,除以2,因为它只被一个信箱栏关闭-
我甚至尝试将TouchPanel.DisplayHeight/Width重置为设备的实际720p值,但不知怎的,在下一次帧更新时,它被重置为480x800。几天前我正在制作一个游戏。 它是为7.1打包的,但在720p模拟器上运行良好 我对兼容性层了解不多,如果它受到图像大小的影响,那么下面是: 我为WVGA、WXGA和720p创建了单独的图像。使用了它们,了解了字母盒,并决定对所有人使用720p图像
可能没什么帮助,但你还是去吧。我刚开始工作,TouchPanel.DisplayHeight需要很早设置为853(如果你检测到你使用的是这些720p设备之一)。我在主Silverlight页面的OnNavigatedTo上进行设置(实际上是SL/XNA) 接下来,您必须将每个触摸位置和手势位置偏移+53.0f/2.0f 我不知道为什么之前这不起作用,因为这是我上面提到的解决方案,它似乎不起作用,因为TouchPanel一直重置为800高度
但是,我在reduced Repo(新的SL/XNA应用程序)和我的主游戏应用程序中都能使用它。这是一个很好的解决方案,我在这里发现: 它不仅解决了触摸屏的问题,而且还从侧面去除了黑块。当然,这取决于您的程序,这可能会导致更多问题,因为分辨率和屏幕比例会发生变化
if (Environment.OSVersion.Version.Major == 8)
{
int? scaleFactor = null;
var content = System.Windows.Application.Current.Host.Content;
var scaleFactorProperty = content.GetType().GetProperty("ScaleFactor");
if (scaleFactorProperty != null)
{
scaleFactor = scaleFactorProperty.GetValue(content, null) as int?;
}
if (scaleFactor == null)
scaleFactor = 100;
if (scaleFactor == 150)
{
SharedGraphicsDeviceManager sdm = SharedGraphicsDeviceManager.Current;
sdm.PreferredBackBufferHeight = 800;
sdm.PreferredBackBufferWidth = 450;
TouchPanel.DisplayHeight = 800;
TouchPanel.DisplayWidth = 450;
}
}
能否在每帧之前手动设置触摸屏参数?