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个外星人并且我击中了最左边的那个,那么它右边的每个外星人都会被删除!我该如何解决这个问题?
答案 0 :(得分:0)
移除外星人和子弹后,你需要突破内循环。
if (bulletBounds[x].Intersects(alienBounds[y]))
{
alienPosition.RemoveAt(y);
alienBounds.RemoveAt(y);
bulletBounds.RemoveAt(x);
hit++;
break;
}
答案 1 :(得分: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;
}
}
}
希望这有帮助!