2012-04-21 3 views
0

Мне нужно обнаружить столкновения одного и того же типа врагов в XNA.
Если обнаружено столкновение, я хотел, чтобы враги развернулись и пошли в другом направлении.Обнаружение столкновений врагов

Если я сохраню все экземпляры в список, как я могу определить, сталкиваются ли разные (но такие же) типы врагов?

Это в C# XNA.

EDIT: У меня есть враги, которые находятся в классе под названием «Враг», все враги в моей игре созданы из этого класса, мне нужно иметь возможность проверить, не столкнулись ли враги.

EDIT 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

By за каждые два врагов проверки, если их расположение такое же, и их typs есть. – Jasper

+1

И я не знаю, но мы не можем дать более полезный ответ unles, который вы дадите нам более подробную информацию о вашем приложении. – Jasper

ответ

2

Чтобы определить, если два противника столкнулись, вам нужно найти Прямоугольник каждый из них оккупирует. Затем вы можете использовать Rectangle.Intersects(Rectangle), чтобы узнать, перекрываются ли они.

Re: Edit:

Каждый враг всегда проверка на столкновения с самим собой. Не то, что вы хотите: (|)

Что-то вроде этого является то, что вы хотите:

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

Если я это сделаю, все враги думают, что они сталкиваются, вот что я пробовал, прежде чем задавать этот вопрос. – user1172635

+0

Мне нужно знать, как отличать объекты противника до тестирования с помощью метода Intersects. – user1172635

+0

Затем проверьте, являются ли оба врага одинаковыми. Это все, что я могу сказать, с информацией, которую вы дали. –