例如我正在制作游戏如何摆脱列表中的最后一个弹丸而不是所有弹丸。 这是我的拍摄代码。
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 :(得分: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();