Class 同一类的两个对象之间的碰撞

Class 同一类的两个对象之间的碰撞,class,xna,collision,Class,Xna,Collision,好的,我有一个敌人职业(旋转,位置,纹理等等)。我在屏幕上繁殖了一些敌人,它们四处移动,但彼此重叠。所以我试着在同一等级的两个敌人之间进行碰撞检查。但无论我尝试什么方法,它都不太管用。我试过的最好的办法是: foreach (Enemy enemy1 in enemies) { enemy1Pos = new Vector2(enemy1.position.X, enemy1.position.Y) foreach (Enemy enemy2 in enemies) { enemy2

好的,我有一个敌人职业(旋转,位置,纹理等等)。我在屏幕上繁殖了一些敌人,它们四处移动,但彼此重叠。所以我试着在同一等级的两个敌人之间进行碰撞检查。但无论我尝试什么方法,它都不太管用。我试过的最好的办法是:

foreach (Enemy enemy1 in enemies)
{
 enemy1Pos = new Vector2(enemy1.position.X, enemy1.position.Y)

 foreach (Enemy enemy2 in enemies)
 {
  enemy2Pos = new Vector2(enemy2.position.X, enemy2.position.Y)
  if (Vector2.Distance(enemy2Pos, enemy1Pos) < 200)
  {
  enemy1Pos += new Vector2((float)(enemy1.Speed * Math.Cos(enemy1.Rotation)), (float)(enemy1.Speed * Math.Sin(enemy1.Rotation)));
  }
 }
}
foreach(敌人中的敌人1)
{
enemy1Pos=新向量2(enemy1.position.X,enemy1.position.Y)
foreach(敌人中的敌人2)
{
enemy2Pos=新向量2(enemy2.position.X,enemy2.position.Y)
if(矢量2.距离(enemy2Pos,enemy1Pos)<200)
{
enemy1Pos+=新向量2((float)(enemy1.Speed*Math.Cos(enemy1.Rotation)),(float)(enemy1.Speed*Math.Sin(enemy1.Rotation));
}
}
}
这不是精确的代码,因此可能有一些错误。无论如何,当我实现这个解决方案时,敌人没有重叠,所以在这方面一切都很好。但是,它们总是移动到屏幕的右侧


我还查找了植绒等,但我想知道,如何检测同一类的两个对象之间的碰撞?

如果enemy1等于enemy2,则始终会发生碰撞。:)

避免

foreach (Enemy enemy2 in enemies)
{
   if (enemy2 == enemy1) continue;
   enemy2Pos = new Vector2(enemy2.position.X, enemy2.position.Y)
   if (Vector2.Distance(enemy2Pos, enemy1Pos) < 200)
   {
      enemy1Pos += new Vector2((float)(enemy1.Speed * Math.Cos(enemy1.Rotation)), (float)(enemy1.Speed * Math.Sin(enemy1.Rotation)));
   }    
}
foreach(敌人中的敌人2)
{
如果(enemy2==enemy1)继续;
enemy2Pos=新向量2(enemy2.position.X,enemy2.position.Y)
if(矢量2.距离(enemy2Pos,enemy1Pos)<200)
{
enemy1Pos+=新向量2((float)(enemy1.Speed*Math.Cos(enemy1.Rotation)),(float)(enemy1.Speed*Math.Sin(enemy1.Rotation));
}    
}
Foreach不是这里最好的。。。您可以通过以下各项以更有效的方式完成冲突检查:

 for (int i = 0; i<enemies.Count-1; i++)
 {
       var enemy1 = enemies[i];
       for (int j=i+1; j<enemies.Count; j++)
       {
           var enemy2 = enemies[j]
       }

for(int i=0;i你到底想要什么?你已经用一个边界球体实现了碰撞检测。如果你想要其他东西,则需要更多信息。我个人会在敌人每次移动时检查碰撞情况(并在碰撞时将其移回).这样,负责碰撞的敌人总是会被移动。哇!这很有效,非常感谢!+额外的解释真的很棒!