2017-03-04 19 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; 
     } 

    } 
} 
} 
を返します。