2017-03-04 187 views
0

我目前正在使用GDI +在C#中開發遊戲引擎,並且已經到了想要將地圖加載到我的引擎中的地步。我使用的是平鋪地圖編輯器(http://www.mapeditor.org/),它允許我很容易地創建地圖並將它們保存到XML文件中。我從來沒有用XML做過任何事情,真的需要一些幫助來閱讀它。閱讀XML文件(C#)

下面是XML文件是什麼:(引擎收錄,因爲它是如此巨大),「數據/層」線都是圍繞線80

http://pastebin.com/z906fdbW

,這裏是我到目前爲止的代碼閱讀。出於某種原因,我的瓷磚計數似乎爲零,我不知道爲什麼。任何幫助都會很棒。

public static void LoadTMX(Screen screen, SpriteSheet sprs, string path) 
    { 
     try 
     { 
      using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read)) 
      { 
       List<int> gids = new List<int>(); 

       XmlDocument xdoc = new XmlDocument(); 
       xdoc.Load(stream); 

       int width = int.Parse(xdoc.DocumentElement.GetAttribute("width")); 
       int height = int.Parse(xdoc.DocumentElement.GetAttribute("height")); 
       int tileWidth = int.Parse(xdoc.DocumentElement.GetAttribute("tilewidth")); 
       int tileHeight = int.Parse(xdoc.DocumentElement.GetAttribute("tileheight")); 

       XmlNodeList layers = xdoc.DocumentElement.SelectNodes("layer"); 

       for (int i = 0; i < layers.Count; i++) 
       { 
        XmlNodeList tiles = layers[i].SelectSingleNode("data").SelectNodes("tile"); 

        // why is the tile count zero? 
        Console.WriteLine(tiles.Count); 
       } 
      } 
     } 
     catch(Exception e) 
     { 
      throw e; 
     } 
    }  int tileWidth = int.Parse(xdoc.DocumentElement.GetAttribute("tilewidth")); 
       int tileHeight = int.Parse(xdoc.DocumentElement.GetAttribute("tileheight")); 

       XmlNodeList layers = xdoc.DocumentElement.SelectNodes("layer"); 

       for (int i = 0; i < layers.Count; i++) 
       { 
        XmlNodeList tiles = layers[i].SelectSingleNode("data").SelectNodes("tile"); 


        Console.WriteLine(tiles.Count); 
       } 
      } 
     } 
     catch(Exception e) 
     { 
      throw e; 
     } 
    } 

回答

0

我測試了你的代碼,但它似乎工作正常;它返回1024兩次

output

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Xml; 
namespace ConsoleApplication2 
{ 
class Program 
{ 
static void Main(string[] args) 
    { 
var path = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())), "XMLFile1.xml"); 
     LoadTMX(path); 
} 
    public static void LoadTMX(string path) 
    { 
     try 
     { 
      using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read)) 
      { 
       List<int> gids = new List<int>(); 
XmlDocument xdoc = new XmlDocument(); 
       xdoc.Load(stream); 
int width = int.Parse(xdoc.DocumentElement.GetAttribute("width")); 
int height = int.Parse(xdoc.DocumentElement.GetAttribute("height")); 
int tileWidth = int.Parse(xdoc.DocumentElement.GetAttribute("tilewidth")); 
int tileHeight = int.Parse(xdoc.DocumentElement.GetAttribute("tileheight")); 
XmlNodeList layers = xdoc.DocumentElement.SelectNodes("layer"); 
for (int i = 0; i < layers.Count; i++) 
       { 
        XmlNodeList tiles = layers[i].SelectSingleNode("data").SelectNodes("tile"); 
Console.WriteLine(tiles.Count); 
       } 
      } 
      Console.ReadKey(); 
     } 
     catch (Exception e) 
     { 
      throw e; 
     } 

    } 
} 
}