如何在WP8 720p设备上使用Windows Phone XNA游戏纠正TouchPanel偏移错误?

时间:2013-01-04 23:25:56

标签: windows-phone-7 xna

在WP8 720p设备上运行的XNA应用程序(WP7或WP7.5应用程序)将自动收到信箱,因此480x800 BackBuffer大小保持不变(为了兼容我认为)。

这很好,除了XNA兼容层中似乎存在错误。 TouchPanel报告按顶部信箱空白区域的大小关闭的触摸位置。

这有两个问题:

  1. 用户的触摸似乎很难让游戏玩法和菜单导航变得困难。
  2. 由于它在负方向偏离,用户将无法触摸屏幕最底部的东西。
  3. 我尝试通过分解53/2像素偏移来解决这个问题(53是缩放坐标中额外空间的总量,除以2,因为它只关闭一个信箱栏 - 顶部的那个) 。这确实纠正了触摸位置,但是因为TouchPanel内部将负值钳位到0,这意味着游戏顶部仍然存在死区(因为-22到-1应该被转换为0到22,但是如果全部负输入值被钳制为0然后信息丢失,负范围内的所有内容将总是转换为22。

    有没有人碰到这个并找到解决方法?

    我甚至尝试将TouchPanel.DisplayHeight / Width重置为设备的实际720p值,并以某种方式通过下一帧更新重置为480x800。

3 个答案:

答案 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;
    }
}