冲突检测在所有平台上都无法按预期工作

本文关键字:工作 平台 冲突检测 | 更新日期: 2023-09-27 18:32:45

这个问题听起来很奇怪,因为我真的不明白这怎么可能,但在这里。我有一些2D游戏的碰撞代码,在Windows,Xbox,WP7,WP8上运行良好。但是由于某种奇怪的原因,当我将游戏作为Windows 8 Metro应用程序运行时,完全相同的代码不起作用。更奇怪的是,当我在Surface上运行相同的项目时,代码有效,但是当我在PC上运行它时,子弹会直接穿过敌人。我不认为发布代码会有任何用处,因为代码在我使用它的地方是相同的,并且知道它确实有效。如果有人知道这是怎么可能的,请告诉我。如果您希望我发布代码,请告诉我。

我将解释一些代码正在做什么:

  • 循环浏览玩家的所有子弹
    • 历所有敌人
      • 如果发生矩形冲突
        • 如果发生每像素冲突
          • 杀死敌人,移除子弹等。

该游戏在我的 PC 上作为 XNA 游戏运行良好,这与我用来将其作为 Metro 应用程序进行测试的 PC 相同。

冲突检测在所有平台上都无法按预期工作

这可能是计算机速度问题。 您的游戏循环是在静态计时器上工作,还是尽可能快地抛出更新/绘制? 子弹可能没有碰撞,因为在一次更新中,它们在敌人的前面,而在下一次更新中,它们在敌人的后面。 尝试"扩大"敌人或子弹作为调试 - 这可能会解决它。 如果是这种情况,您可能需要在更新中进行一些项目符号更新,以确保它命中两者之间的所有位置。并且不会通过敌人瞬移。

如果您

使用像素值来测试冲突,您可能会尝试使用 DIP(与设备无关的像素(像素,认为它们是屏幕位置像素(Metro 的新内容,事实上,这是默认设置(。

将应用设置为在模拟模式下运行,并将 SIM 卡的屏幕分辨率设置为:1366x768。它突然正常工作吗?如果是这样,那么这是一个 DIP 问题。

从这里开始:http://msdn.microsoft.com/en-us/library/windows/desktop/ff684173(v=vs.85(.aspx

请注意页面中间的公式:DIPs = 像素/(DPI/96.0(