1

例如,我目前正在开发一款游戏,我将如何摆脱列表中的最后一个 Projectile 而不是全部。这是我的拍摄代码。

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

2 回答 2

1

我建议PListArrayLista 更改并List<Projectile>改为 a 。

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

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

这将删除所有具有set 或距离为 的Projectile实例。Remove<10

于 2013-06-26T22:03:24.630 回答
1

我不知道是什么p,但它看起来不像与任何特定的射弹实例相关联。您一次对所有射弹使用相同的标志

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

Plist = Plist.Where(po -> Vector2.Distance(po.Position, po.Target) >= 10).ToList();
于 2013-06-26T22:05:17.860 回答