2016-05-29 58 views
0

私は私が私のクラスのいずれかにDrawメソッドを実行するたびにIndexOutOfRangeExceptionを取得しておくのC#の問題を抱えているとSystem.IndexOutOfRangeException。C#Monogame - 2次元配列

私は今、時間のカップルのための問題を把握しようとしてきたが、私は、正確な問題を見つけることができていないと私はStackOverflowの上の任意の解決策を見つけることができませんでした。

私はC#(私は3または4日間学習してきた)、そのソリューションのおそらくかなり明白になるだろうに新たなんです。

Level.cs:

using Microsoft.Xna.Framework.Graphics; 

namespace Game1 { 
    class Level { 
     public Tile[,] Tiles; 

     public void Draw(SpriteBatch sb) { 
      for (int x = 0; x < Tiles.GetLength(0); x++) 
       for (int y = 0; x < Tiles.GetLength(1); y++) 
        if (Tiles[x, y] != null) 
         Tiles[x, y].Draw(sb, x, y); 
     } 

     public Level(int size) { 
      Tiles = new Tile[size, size]; 
      for (int x = 0; x < size; x++) 
       for (int y = 0; y < size; y++) 
        Tiles[x, y] = Tile.Tiles[0]; 
     } 
    } 
} 

Tile.cs:あなたの代わりに、ループの中で... Y <かどうかをチェックしてみ

public void Draw(SpriteBatch sb) { 
     for (int x = 0; x < Tiles.GetLength(0)-1; x++) 
      for (int y = 0; x < Tiles.GetLength(1)-1; y++) 
       if (Tiles[x, y] != null) 
        Tiles[x, y].Draw(sb, x, y); 
    } 

答えて

1

using System.Collections.Generic; 

using Microsoft.Xna.Framework; 
using Microsoft.Xna.Framework.Graphics; 

namespace Game1 { 
    class Tile { 
     public static List<Tile> Tiles = new List<Tile>(); 

     Texture2D Image; 

     public void Draw(SpriteBatch sb, int x, int y) { 
      sb.Draw(this.Image, new Vector2(x * this.Image.Width, y * this.Image.Height), Color.White); 
     } 

     public Tile(Texture2D image) { 
      this.Image = image; 
      Tiles.Add(this); 
     } 
    } 
} 
+1

これは正解ですが、あなたは非常に悪いことを発表しました。それが立っているので、コメントに適しています。何が間違っているのか、そして何を修正する必要があるのか​​を明確に示すために、これを少し体質化することを提案できますか? – Enigmativity

-1

はこれを試してみてください< ...

Xの場合

EDIT: - 秒(インナー)ループで最初の(外側)ループとyxをチェックするために変更し、以下の方法:

public void Draw(SpriteBatch sb) { 
    for (int x = 0; x < Tiles.GetLength(0); x++) 

     for (int y = 0; y < Tiles.GetLength(1); y++) //CHANGE THIS LINE 

      if (Tiles[x, y] != null) 
       Tiles[x, y].Draw(sb, x, y); 
}