0

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

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

这有两个问题:

  1. 用户的触摸似乎使游戏玩法和菜单导航变得困难。
  2. 因为它在负方向上关闭,所以用户将根本无法触摸屏幕最底部的东西。

我尝试通过仅考虑 53 / 2 像素偏移来解决此问题(53 是缩放坐标中额外空间的总量,除以 2,因为它仅被一个信箱栏关闭 - 顶部的那个)。这确实纠正了触摸位置,但因为 TouchPanel 内部将负值钳制为 0,这意味着游戏顶部仍然存在死区(因为 -22 到 -1 应该转换为 0 到 22,但如果所有负输入值被限制为 0,然后信息丢失,负范围内的所有内容将始终转换为 22)。

有没有人遇到过这个问题并找到解决方法?

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

4

3 回答 3

2

我刚刚开始工作,TouchPanel.DisplayHeight 需要很早就设置为 853(如果你检测到你在这些 720p 设备之一上)。我在 Silverlight 主页面的 OnNavigatedTo 处执行此操作(这实际上是 SL/XNA)。

接下来,您必须将每个触摸位置和手势位置偏移 + 53.0f / 2.0f。

我不确定为什么这以前不起作用,因为这是我上面提到的似乎不起作用的解决方案,因为 TouchPanel 一直重置到 800 高度。

但是,我让它在简化版(新的 SL/XNA 应用程序)和我的主要游戏应用程序中都能正常工作。

于 2013-01-05T00:00:42.480 回答
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;
    }
}
于 2014-05-04T14:02:00.773 回答
0

几天前我在做一个游戏。它是为 7.1 打包的,但在 720p 模拟器上运行良好。

我不太了解兼容层,如果它受到图像大小的影响,那么这里是:我为 WVGA、WXGA 和 720p 创建了单独的图像。使用它们并了解信箱并决定为所有人使用 720p 图像。

可能无济于事,但无论如何你都去了。

于 2013-01-04T23:42:51.503 回答