在WP8 720p设备上运行的XNA应用程序(WP7或WP7.5应用程序)将自动收到信箱,因此480x800 BackBuffer大小保持不变(为了兼容我认为)。
这很好,除了XNA兼容层中似乎存在错误。 TouchPanel报告按顶部信箱空白区域的大小关闭的触摸位置。
这有两个问题:
我尝试通过分解53/2像素偏移来解决这个问题(53是缩放坐标中额外空间的总量,除以2,因为它只关闭一个信箱栏 - 顶部的那个) 。这确实纠正了触摸位置,但是因为TouchPanel内部将负值钳位到0,这意味着游戏顶部仍然存在死区(因为-22到-1应该被转换为0到22,但是如果全部负输入值被钳制为0然后信息丢失,负范围内的所有内容将总是转换为22。
有没有人碰到这个并找到解决方法?
我甚至尝试将TouchPanel.DisplayHeight / Width重置为设备的实际720p值,并以某种方式通过下一帧更新重置为480x800。
答案 0 :(得分:2)
我刚刚开始工作,TouchPanel.DisplayHeight需要设置为853(如果你发现你是在这些720p设备中的一个上)。我是在OnNavigatedTo从主Silverlight页面(实际上是SL / XNA)上做的。
接下来,您必须将每个触摸位置和手势位置偏移+ 53.0f / 2.0f。
我不确定之前为什么这不起作用,因为这是我上面提到的解决方案似乎不起作用,因为TouchPanel保持重置为800高度。
但是,我让它在减少的repro(新的SL / XNA应用程序)和我的主要游戏应用程序中工作。
答案 1 :(得分:0)
几天前我正在制作一款游戏。 它打包为7.1,但在720p模拟器上工作正常。
我对兼容层知之甚少,如果它受到图像大小的影响,那么这里: 我为WVGA,WXGA和720p创建了单独的图像。使用它们并发现有关信箱的信息并决定使用720p图像。
可能没有帮助,但无论如何你去了。
答案 2 :(得分:0)
这是我从这里找到的很好的解决方案:http://developer.nokia.com 它不仅可以解决触摸问题,还可以从侧面移除黑色块。当然,根据您的程序,这可能会导致更多问题,因为分辨率和屏幕比率会发生变化。
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;
}
}