C# 为什么这种碰撞检测方法不能命中所有对象?

C# 为什么这种碰撞检测方法不能命中所有对象?,c#,xna,C#,Xna,我目前正在开发一款游戏,玩家可以用子弹摧毁小行星 目前,这个碰撞检测代码正在撞击1到2颗小行星,但屏幕上显示的并非全部。 我认为下面的代码中有一个缺陷,但我不确定在哪里 public void CollisionDetection() { 对于(int i=0;i

我目前正在开发一款游戏,玩家可以用子弹摧毁小行星

目前,这个碰撞检测代码正在撞击1到2颗小行星,但屏幕上显示的并非全部。 我认为下面的代码中有一个缺陷,但我不确定在哪里

public void CollisionDetection()
{
对于(int i=0;i
我想你有些代码弄错了。在距离比较过程中,如果Y距离小于宽度,而X距离小于高度,则应将X轴和Y轴分开,以免发生碰撞

我假设位置是对象的中间,否则算法会复杂得多。我还假设子弹实际上没有大小,x轴是宽度,y轴是高度。 如果看不到代码的其余部分,就很难说;-)

我的建议是:

Vector2小行星位置=小行星位置[j];
向量2 shipPosotion=ship.bullets[i];
浮动距离X=数学Abs(Asterbosition.X-shipPosotion.X);
浮动距离Y=Math.Abs(asterposition.Y-shipPosotion.Y);
如果((int)distanceX
这段代码根本没有经过测试,我甚至不知道这到底是哪种语言。所以就把它当作灵感吧。希望能成功


注:如果您感兴趣,我可以将我不久前研究的小行星射击游戏的源代码邮寄给您…

建议您将位置1重命名为ASTEORDPOSITION,将位置2重命名为shipPosition。只是为了更好的可读性…在小行星被移除后,j是做什么用的?它是Xna,所以C#。。。我实际上使用了其他游戏教程中类似的代码。如果你处理圆形对象,你的碰撞代码可能一点也不错。也许问题出在小行星定位对象的RemoveAt()方法中。嗯,子弹有时会“掠过”小行星,大约每隔一段时间它就会正确地击中并移除小行星。。。