索引超出for循环范围

时间:2016-05-24 00:55:12

标签: c#

所以我正在开发一款游戏,除了游戏引擎,我还有一个for循环来检测与Panels列表中所有对象的碰撞

以下是代码:

for (int x = 1; x <= 2; x++)
{
    if (player.obj.Bounds.IntersectsWith(walls[x].Bounds))
    {
       MessageBox.Show("COLLIDING");
    }
}

目前,列表中只添加了两个名为wall的对象 每次我去跑步它告诉我Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index我不知道该怎么做,我是否设置了if语句错误?

我只是尝试将它从for循环中取出并将x替换为0,当我触摸该对象时它说我碰撞了,所以我知道我没有设置if语句错误。

3 个答案:

答案 0 :(得分:3)

正如您可能知道或不知道的那样,数组在索引中从0开始,因此您的数组应该是这样的。

for (int x = 0; x < 2; x++) 
{
    if (player.obj.Bounds.IntersectsWith(walls[x].Bounds)) 
    {
        MessageBox.Show("COLLIDING");
    }
}

答案 1 :(得分:1)

如果墙上有2个物体,则环路不需要转到x = 2

  for (int x = 0; x < 2; x++)
        {
            if (player.obj.Bounds.IntersectsWith(walls[x].Bounds))
            {
                MessageBox.Show("COLLIDING");
            }
        }

当数组从索引0开始

答案 2 :(得分:0)

walls[]数组中有两个元素表示它们位于walls[0]walls[1]中(因为.Net数组遵循基于0的索引),因此{{ 1}}是出界的;因此,您应该使用walls[2]启动循环以获取第一个元素并循环到0但我强烈建议您使用2而不是walls

的长度
2