2011-09-06 64 views
0

我有个天体,其中都有一个边框每次更新的名单......我怎样才能有效地其中迭代?我认为像这样检查是好的,但任何想法?XNA 4.0 perparing多个碰撞检测与列表

 for (int i = 0; i < birds.Count; i++) 
     { 
      for (int j = 0; j < birds.Count; j++) 
      { 
       if (j > i) 
       { 
        if (birds[j].boundingRectangle.Intersects(birds[i].boundingRectangle)) 
        { 

           birds[i].tintColor = Color.Yellow; 
           birds[j].tintColor = Color.Yellow; 

        } 
        else 
        { 

          birds[i].tintColor = Color.White; 
          birds[j].tintColor = Color.White; 

        } 
       } 
      } 
     } 
+0

此外,返回我的长方形,Color.White每次ofcourse ... :( – JML

回答

0

我看不到为什么它会检测不到碰撞,代码似乎没问题。你应该输出一些字符串来显示边界矩形的值,看它们是否被正确设置,或者你是否正在执行该代码,或者如果你的“鸟”数组在你执行代码的地方存活修改副本而不是实际的数组)。

至于改进,你可以这样做:

for (int j = i+1; j < birds.Count; j++) 

,然后你可以删除if (j > i)(j总是会> I)。 ,我会推荐其他的事情不是在for声明,宣布int j。它总是更好些,有它宣布比实例化每i外面,所以:

int i, j; 
for (i = 0; i < birds.Count; i++) 
     for (j = i+1; j < birds.Count; j++) 

,我不认为还有更多的提升空间有没有能够使用指针。无论如何,你的方法对二维图形来说都很好,除非你正在检查数百个物体。

PS:我认为你的问题可以适合Game Development - SE网站(除非你使用XNA和边框别的东西:P)

0

您的问题是比较矩形当你鸟设置为白色,即使它之前被命中检测设置为黄色,因此它可能已被设置为黄色,但如果最后一次测试失败,它将被重新设置。

如何在每一帧(碰撞检测之前)开始设置矩形为白色,然后如果你得到一个碰撞将它们设置为黄色(让他们自生自灭,如果没有冲突)。

+0

谢谢你的提示家伙真的帮助了很多.. – JML