0

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

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

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

该游戏在我的 PC 上作为 XNA 游戏运行良好,这是我用来测试它作为 Metro 应用程序的同一台 PC。

4

2 回答 2

2

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

于 2013-09-25T20:14:28.030 回答
1

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

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

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

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

于 2013-09-26T16:07:08.220 回答