2016-05-24 6 views
0

ためにだから私はさておき、ゲームエンジンから、ゲームに取り組んでいます、と私はここでパネル指数はループ

のリスト内のすべてのオブジェクトとの衝突を検出するループのコードですがあります。声明間違っている場合

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

は現在だけ壁 と呼ばれるリストに追加した2つのオブジェクトがあると毎回私はそれは私が何をすべきかわからないIndex was out of range. Must be non-negative and less than the size of the collection. Parameter name: indexを告げる実行するために行く、私は設定していますか?

私はちょうどforループから取り除き、xを0に置き換えようとしました。そのオブジェクトに触れたとき、私は衝突していると言いました。したがって、if文を間違って設定していませんでした。

答えて

3

wallsの長さを使用することをお勧めいたします、配列はインデックスに0から始まるので、あなたの配列はそうのようにする必要があります。

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

私はそれでもエラーが発生します –

+0

'x <= 2'ではなく' x <2'を覚えましたか? wall []配列の長さはどれくらいですか? –

+0

よろしくお願いします。ありがとうございました! –

1

壁に2つのオブジェクトがある場合はループに行く必要はなく、X = 2

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

配列は、あなたがwalls[]配列内の2つの要素を持っている0

0

は、彼らが置かウェアを意味したインデックスに開始するとwalls[0]およびwalls[1](.Net配列は0ベースのインデックス作成に従っているため)walls[2]は範囲外です。したがって、0でループを開始して最初の要素を取得し、ループを2にする必要があります。あなたがか知らないかもしれないことのようしかし、私は強く代わり2

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