1

たとえば、私は現在ゲームに取り組んでおり、リスト内のすべての Projectile ではなく、最後の 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

PListから変更しArrayListて、List<Projectile>代わりに a にすることをお勧めします。

それを考えると、Projectile.Removeフラグとループを削除して、次を使用できます。

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

Projectileこれにより、 setを持つすべてのインスタンス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 に答える