2012-04-21 56 views
0

我需要检测XNA中同一类型敌人的碰撞。
如果检测到碰撞,我希望敌人转身向另一个方向行走。检测敌人的碰撞

如果我将所有实例保存到列表中,如何检测不同(但相同)类型的敌人是否发生碰撞?

这是C#XNA。

编辑:我有一个叫做“敌人”的类的敌人,我的游戏中的所有敌人都是从这个类创建的,我需要能够检查敌人是否发生了碰撞。

编辑2:

下面是一个代码示例:

// Fields.   
    private List<Enemy> enemies = new List<Enemy>(); 

    // Add our enemies when we need to. 
    enemies.Add(new Enemy(this, position, spriteSet)); 

    // Here is it's update method. 
    private void UpdateEnemies(GameTime gameTime) 
    { 
     foreach (Enemy enemy in enemies) 
     { 
      enemy.Update(gameTime); 

      // This code works because it's comparing the player. 
      if (enemy.BoundingRectangle.Intersects(Player.BoundingRectangle)) 
      { 
       OnPlayerKilled(enemy); 
      } 
      // This code is always ture because enemy is enemy I can't figure out how to solve this. 
          if (enemy.BoundingRectangle.Intersects(enemy.BoundingRectangle)) 
      { 
       // Make enemies turn... This if statement is the problem. 
      } 
     } 
+0

通过为如果他们的位置是相同的和他们typs是每两个敌人检查。 – Jasper 2012-04-21 13:14:09

+1

我是orry,但我们无法给你一个更有帮助的答案unles你给我们提供关于你的应用程序的更多细节 – Jasper 2012-04-21 13:14:40

回答

2

如果要判断两个敌人发生了碰撞,你需要找到它们各自占据的矩形。然后你可以使用Rectangle.Intersects(Rectangle)找出它们是否重叠。

回复:编辑:

每一个敌人总是检查与自身碰撞。不是你想要的:(|)

像这样的东西是你想要什么:

foreach (Enemy enemy1 in enemies) 
{ 
    foreach (Enemy enemy2 in enemies) 
    { 
     if (enemy1 != enemy2 && enemy1.BoundingRectangle.Intersects(enemy2.BoundingRectangle)) 
     { 
      // enemy1 is colliding! 
     } 
    } 
} 
+0

如果我这样做,所有的敌人都认为他们正在碰撞,这就是我在提出这个问题之前所尝试的。 – user1172635 2012-04-21 14:13:19

+0

我需要知道如何在使用Intersects方法进行测试之前区分敌方物体。 – user1172635 2012-04-21 14:24:51

+0

然后检查两个敌人是否是相同的类型。这就是我所能提供的信息。 – 2012-04-21 15:11:32