【问题标题】:Index out of range in for loop [duplicate]for循环中的索引超出范围[重复]
【发布时间】:2016-05-24 00:55:11
【问题描述】:

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

代码如下:

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

目前只有两个对象添加到名为墙壁的列表中 而且每次我去运行它都会告诉我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 语句。

【问题讨论】:

    标签: c#


    【解决方案1】:

    您可能知道也可能不知道,数组从索引中的 0 开始,所以您的数组应该是这样的。

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

    【讨论】:

    • 执行此操作时仍然出现错误
    • 你记得有 x &lt; 2 而不是 x &lt;= 2 吗? wall[] 数组有多长?
    • 好的,非常感谢!
    • 没问题。祝你的游戏好运!
    【解决方案2】:

    如果墙上有 2 个对象,则循环不需要转到 x = 2

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

    因为数组从索引 0 开始

    【讨论】:

      【解决方案3】:

      walls[] 数组中有两个元素意味着它们位于walls[0]walls[1](因为.Net 数组遵循基于0 的索引),因此walls[2] 超出范围;所以你应该以0 开始循环以获取第一个元素并循环到2但我强烈建议您使用walls 的长度而不是2

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

      【讨论】:

        猜你喜欢
        • 2017-08-09
        • 2019-04-17
        • 2013-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-02
        • 1970-01-01
        • 2021-09-02
        相关资源
        最近更新 更多