C# 循环碰撞

C# 循环碰撞,c#,xna,C#,Xna,我用这段代码要做的是遍历两个对象列表,看看它们是否冲突。我在另一个问题中看到,做这件事的唯一方法是向后遍历列表,所以我这样做了。现在的问题是,当子弹与外星人相撞时,列表中它之前的每个外星人也会被删除。所以如果我在屏幕上有6个外星人,我点击最左边的那一个,右边的每个外星人都会被删除!如何修复此问题?移除外星人和子弹后,您需要打破内部循环 for (int x = bulletBounds.Count - 1; x > -1; x-- ) { f

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

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

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

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

 if (bulletBounds[x].Intersects(alienBounds[y]))
 {
     alienPosition.RemoveAt(y);
     alienBounds.RemoveAt(y);
     bulletBounds.RemoveAt(x);
     hit++;
     break;
 }

希望这有帮助

你试过调试代码吗?只需在
if
语句上放置一个断点。尝试从alienBounds中删除条目。我有两个alien列表,alienPosition创建位置并绘制alien,而alienBounds创建alienPosition中创建的alien周围的矩形。我的项目清单也有同样的方法。我知道这不是最好的方法,但我想不出其他替代方法。这是行不通的。不能迭代(foreach)集合/数组/列表并同时删除。
foreach (var bullet in bulletBounds)
{
    foreach (var alien in alienBounds)
    {
        if (bullet.Intersects(alien))
        {
            bulletBounds.Remove(bullet);
            alienBounds.Remove(alien);
            break;
        }
    }
}