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