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