碰撞检测在所有平台上都无法正常工作

时间:2013-09-25 20:09:05

标签: c# windows-8 xna collision-detection

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

我将解释一下代码的作用:

  • 循环播放所有玩家的子弹
    • 循环所有的敌人
      • 如果发生矩形碰撞
        • 如果发生每像素碰撞
          • 杀死敌人,移除子弹等。

游戏在我的电脑上运行得很好,就像我用来测试它作为地铁应用程序的PC一样。

2 个答案:

答案 0 :(得分:2)

这可能是计算机速度问题。你的游戏循环是在静态计时器上工作,还是你尽可能快地抛出更新/绘制?子弹可能不会发生碰撞,因为在一次更新时他们就在敌人面前,而在下一次更新时他们就落后了。尝试“扩大”敌人或子弹作为调试 - 可以解决它。如果是这种情况,您可能必须在更新中进行一些子弹更新,以确保它击中中间的所有位置。并没有传送到敌人身上。

答案 1 :(得分:1)

如果您使用像素值来测试碰撞,您可能会尝试使用DIP(设备无关像素)像素,认为它们是屏幕位置像素(Metro的新功能,事实上,它是默认值)。

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

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

注意页面中间的公式:DIPs = pixels /(DPI / 96.0)