-4
    for (int x = bulletBounds.Count - 1; x > -1; x-- )
        {
            for (int y = alienPosition.Count - 1; y > -1; y--)
            {
                if (bulletBounds[x].Intersects(alienBounds[y]))
                {
                    alienPosition.RemoveAt(y);
                    bulletBounds.RemoveAt(x);
                    hit++;
                }
            }
        }

我试图用这段代码做的是遍历两个对象列表,看看它们是否发生冲突。我在另一个问题中看到,这样做的唯一方法是向后遍历列表,所以我这样做了。现在的问题是,当一颗子弹与外星人相撞时,列表中在它之前的每个外星人也会被删除。因此,如果我在屏幕上有 6 个外星人,而我点击了最左边的那个,则它右侧的每个外星人都会被删除!我该如何解决?

4

2 回答 2

0

移除外星人和子弹后,您需要打破内循环。

 if (bulletBounds[x].Intersects(alienBounds[y]))
 {
     alienPosition.RemoveAt(y);
     alienBounds.RemoveAt(y);
     bulletBounds.RemoveAt(x);
     hit++;
     break;
 }
于 2013-04-10T04:32:41.643 回答
0

添加break;到您的 if 循环中。顺便问一下,alienBounds 和 alienPosition 有什么区别?但是,您正在循环通过 alienPosition,访问 alienBounds 中的数据。在下面的示例中,我只是循环通过 alienBounds。如果我误解了什么,请告诉我,我会相应地更新我的答案。

foreach (var bullet in bulletBounds)
{
    foreach (var alien in alienBounds)
    {
        if (bullet.Intersects(alien))
        {
            bulletBounds.Remove(bullet);
            alienBounds.Remove(alien);
            break;
        }
    }
}

希望这可以帮助!

于 2013-04-10T05:02:39.440 回答