如何删除xna中数组列表中的最后一个Object

时间:2013-06-26 22:00:03

标签: c# arrays list xna xna-4.0

例如我正在制作游戏如何摆脱列表中的最后一个弹丸而不是所有弹丸。 这是我的拍摄代码。

           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;
            }

2 个答案:

答案 0 :(得分:1)

我建议您从PList更改ArrayList并改为List<Projectile>

鉴于此,您可以删除Projectile.Remove标志和循环,只需使用:

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

这将删除设置为Projectile的所有Remove个实例或距离为<10的位置。

答案 1 :(得分:1)

我不知道p是什么,但看起来它与任何特定的射弹实例无关。你一次对所有的射弹使用相同的旗帜

如果您只想要一个值得存在的新射弹列表,最简单的方法就是使用linq:

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