2013-06-26 2 views
1

например. Я сейчас работаю над игрой, как бы я избавился от последнего снаряда в списке, а не всех. Вот мой код выстрела.Как удалить последний объект в списке массивов в xna

  if (mouse.RightButton == ButtonState.Pressed) 
      { 
       if (Plist.Count < 100) 
       { 

        Plist.Add(p); 
        f = 0; 
        p.Position = gamePlayer.Position; 

       } 


        p.Target = new Vector2(mouse.X + gameCamera.Position.X, mouse.Y + gameCamera.Position.Y) + randomv; 

      } 

      foreach (Projectile po in Plist) 
      { 


       if (Vector2.Distance(po.Position, po.Target) < 10) 
       { 
        p.Remove = true; 
       } 
      } 
      if (p.Remove == true) 
      { 
       for (int i = 0; i < Plist.Count; i++) 
       { 
        Plist.RemoveAt(i); 

       } 
       p.Remove = false; 
      } 
+0

Если вы хотите точно 100 снарядов за раз, почему бы не поставить его в стек? – CodeCamper

ответ

1

Я хотел бы предложить изменения PList от ArrayList и делает его List<Projectile> вместо этого.

Учитывая, что вы могли бы устранить свой Projectile.Remove флаг и свой цикл, и просто использовать:

PList.RemoveAll(po => po.Remove || Vector2.Distance(po.Position, po.Target) < 10); 

Это удалит все Projectile экземпляры с Remove набора или где расстояние <10.

1

Я не знаю, что такое p, но это не похоже, что это связано с каким-либо конкретным экземпляром снаряда. Вы используете один и тот же флаг для всех снарядов сразу

Если вы просто хотите новый список снарядов, которые заслуживают того, чтобы существовать, проще всего использовать в LINQ:

Plist = Plist.Where(po -> Vector2.Distance(po.Position, po.Target) >= 10).ToList(); 
+1

Это не будет работать с 'ArrayList', btw, что и указано OP, но разумно, если OP переключается на' List '. –

+0

Спасибо, что вы сказали, и это работает sam i am :) – user2437820