C# 生成多个边界框时出错“;System.ArgumentOutOfRangeException“;

C# 生成多个边界框时出错“;System.ArgumentOutOfRangeException“;,c#,monogame,C#,Monogame,我试图在敌人和被击中的子弹之间创建边界框(碰撞)。不幸的是,每当敌人离开屏幕,或者一次产生一个以上的子弹时,我就会看到错误System.ArgumentOutOfRangeException 这两个边界框都是在bullet&Foreign类的Update函数中创建的,如下所示: boundingBox = new Rectangle((int)position.X, (int)position.Y, texture.Width, texture.Height); 这是我的Game1更新功能中使

我试图在敌人和被击中的子弹之间创建
边界框
(碰撞)。不幸的是,每当敌人离开屏幕,或者一次产生一个以上的子弹时,我就会看到错误
System.ArgumentOutOfRangeException

这两个边界框都是在bullet&Foreign类的
Update
函数中创建的,如下所示:

boundingBox = new Rectangle((int)position.X, (int)position.Y, texture.Width, texture.Height);
这是我的
Game1
更新功能中使用的相关代码:

for (int i = bullets.Count - 1; i >= 0; i--)
                {
                    bullets[i].Update(gameTime);

ERROR OCCURS HERE ->     if (bullets[i].boundingBox.Intersects(enemies[i].boundingBox))
                            {
                                score += 1;
                                bullets.RemoveAt(i);
                            }

                    //Bullets being destroyed upon leaving 
                    if (bullets[i].position.Y < 0)
                        bullets.RemoveAt(i);
                }

如果必须猜测的话,错误来自
If(子弹[I].boundingBox.Intersects(敌人[I].boundingBox))
语句

基本上,你有相同数量的敌人和子弹吗?如果不是,那么只要数字不同,它就会失败

为什么会这样?好的,您正在使用两个不同的集合,
子弹
敌人
,并将元素置于位置
i

因此,如果集合中有5颗子弹,但只有1个敌人,则for的第一次迭代将有
i=4
,一个在
敌人
集合中不存在的位置(它只有
敌人[0]
位置)

解决问题的一种方法是:

foreach (enemy in enemies)
    foreach (bullet in bullets)
        if (bullet.boundingBox.Intersects(enemy.boundingBox)) 
        { 
            // do your logic here.
        }

你穿过每一个敌人,检查每一个敌人是否有子弹与之相交。就性能而言,这并不是最好的解决方案,但我认为这是一个良好的开端。

那么这个异常究竟发生在哪里呢?很抱歉,错误发生在第二段代码的第5行:-“if(子弹[I].boundingBox.Intersects(敌人[I].boundingBox))”这是我的想法,这句话翻译成书面语有意义吗?您正在检查第i颗子弹是否击中第i个敌人。它不能击中另一个吗?就目前的情况而言,没有。但我希望它击中。我不知道该如何着手解决这个问题非常感谢你,先生。我真的很感激!
foreach (enemy in enemies)
    foreach (bullet in bullets)
        if (bullet.boundingBox.Intersects(enemy.boundingBox)) 
        { 
            // do your logic here.
        }