2017-09-10 2 views
2

にそれを送り、私は、これはレベルのテキストファイルが見えるもので、テキストファイルからの私のゲームのロードでレベルを作成し、2次元配列にロードしたいていますテキストファイルからデータを取得し、2次元配列

0,0,0,0,0,0,0,0,0,0 
1,1,1,1,1,1,1,1,1,1 
2,2,2,2,2,2,2,2,2,2 
3,3,3,3,3,3,3,3,3,3 
4,4,4,4,4,4,4,4,4,4 
5,5,5,5,5,5,5,5,5,5 
6,6,6,6,6,6,6,6,6,6 
7,7,7,7,7,7,7,7,7,7 
8,8,8,8,8,8,8,8,8,8 
9,9,9,9,9,9,9,9,9,9 

それぞれの数字を別々のタイルにする必要があります。カンマはセパレータとして機能しますが、実際に2次元配列にデータを取り込む方法はわかりません。タイル[X、Y] =新しいタイル()ラインで

Tile[,] Tiles; 
    string[] mapData; 
    public void LoadMap(string path) 
    { 
     if (File.Exists(path)) 
     { 
      mapData = File.ReadAllLines(path); 

      var width = mapData[0].Length; 
      var height = mapData.Length; 

      Tiles = new Tile[width, height]; 

      using (StreamReader reader = new StreamReader(path)) 
      { 
       for (int y = 0; y < height; y++) 
       { 
        for (int x = 0; x < width; x++) 
        {       
         Tiles[x, y] = new Tile(SpriteSheet, 5, 3, new Vector2(x * 64, y * 64)); 
        } 
       } 
      } 
     } 
    } 

番号5と3はtextureatlasでテクスチャの位置を表す:これは私が持っているどのくらいです。ファイル内の数字がtopleftで0のようなif文を追加したいのですが、Tiles [0、0]をtextatlasの特定の行と列に設定します。これについての助けがあれば幸いです。私はそれを見ていません!

答えて

2

まず、var width = mapData[0].Length;は、カンマを含む文字配列の長さを返します(19)。カンマを返さないように見えます。文字列を分割する必要があります。

Tile[,] Tiles; 
string[] mapData; 
public void LoadMap(string path) 
{ 
    if (File.Exists(path)) 
    { 
     mapData = File.ReadAllLines(path); 

     var width = mapData[0].Split(',').Length; 
     var height = mapData.Length; 

     Tiles = new Tile[width, height]; 

     using (StreamReader reader = new StreamReader(path)) 
     { 
      for (int y = 0; y < height; y++) 
      { 
       string[] charArray = mapData[y].Split(','); 
       for (int x = 0; x < charArray.Length; x++) 
       {    
        int value = int.Parse(charArray[x]); 

        ... 

        Tiles[x, y] = new Tile(SpriteSheet, 5, 3, new Vector2(x * 64, y * 64)); 
       } 
      } 
     } 
    } 
} 
+0

これは完全に機能しました。ありがとうございました。 – Stan

関連する問題