2014-12-03 111 views
0

我得到了一個名爲對象的敵人列表和一列子彈。使用列表進行碰撞檢測

list對象在Game1類中。

我在列表中添加和刪除的敵人用這種方法:

public void LoadEnemies() { 
     int Y = 100; 
     if (spawn >= 1) 
     { 
      spawn = 0; 
      if (objects.Count() < 4) 
       objects.Add(new enemyObjects(Content.Load<Texture2D>("obstacle"), new Vector2(1100, Y))); 
     } 

     for (int i = 0; i < objects.Count; i++) 
     { 
      if (!objects[i].isVisible) 
      { 
       //If the enemy is out of the screen delete it 
       objects.RemoveAt(i); 
       i--; 
      } 
     } 
    } 

而且我也得到了子彈的列表:public List<Bullet> bullets = new List<Bullet>(); ,我火子彈的方法:

private void ShootFireBall() { 
     if (mCurrentState == State.Walking) 
     { 
      bool aCreateNew = true; 
      foreach (Bullet aBullet in bullets) 
      { 
       if (aBullet.bulletVisible == false) 
       { 
        aCreateNew = false; 
        aBullet.Fire(position + new Vector2(Size.Width/2, Size.Height/2), 
         new Vector2(200, 0), new Vector2(1, 0)); 
       } 
      } 

      if (aCreateNew) 
      { 
       Bullet aBullet = new Bullet(); 
       aBullet.LoadContent(contentManager, "bullet"); 
       aBullet.Fire(position + new Vector2(Size.Width/2, Size.Height/2), 
         new Vector2(200, 0), new Vector2(1, 0)); 
       bullets.Add(aBullet); 
      } 
     } 
    } 

的問題是我需要一個矩形,所以我可以檢查是否有碰撞。 如何檢查與2個列表的碰撞? 有什麼辦法將它轉換爲矩形? 一直呆在這個幾個小時,真的無法弄清楚。

回答

2

我通常所有的小精靈都來自一個普通的類型。雪碧,GameEntity等等。這基本類型會暴露屬性,如BoundsLocation

喜歡的東西:

public abstract class Sprite 
{ 
    public Vector2 Location { get; set; } 
    public Rectangle Bounds 
    { 
     get 
     { 
      return new Rectangle((int)Location.X, (int)Location.Y, 
           _texture.Width, _texture.Height); 
     } 
    } 

    private Texture2D _texture; 

    public Sprite(Texute2D texture) 
    { 
     _texture = texture; 
    } 
} 

public class enemyObjects : Sprite 
{ 

    // enemy-specific properties go here 

    public enemyObjects(Texture2D texture) 
     : base(texture) 
    { 
    } 
} 

public class Bullet : Sprite 
{ 

    // Bullet-specific properties go here 

    public Bullet(Texture2D texture) 
     : base(texture) 
    { 
    } 
} 

然後,你可以簡單地使用objects[i].Bounds獲得包含對象的矩形。