2017-03-04 3 views
0

저는 현재 C#에서 GDI +를 사용하여 게임 엔진을 개발 중이며 맵에 엔진을로드하고 싶습니다. 나 타일 맵 편집기 (http://www.mapeditor.org/) 정말 쉽게지도를 만들고 XML 파일에 저장할 수 있습니다 사용하고 있습니다. 필자는 실제로 XML을 사용해 본 적이 없으며 실제로 XML을 읽는 데 도움이 필요합니다. 여기 XML 파일 읽기 (C#)

는 XML 파일이 무엇이다 : (페이스트 빈은 너무 거대하기 때문에), "데이터/레이어"라인이 라인 주위에 80

http://pastebin.com/z906fdbW

여기가 내가 지금까지에있는 코드입니다 읽어. 어떤 이유로 든 타일 수가 0 인 것으로 보이고 그 이유를 모르겠습니다. 어떤 도움이라도 좋을 것입니다.

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; 
     } 

    } 
} 
} 
을 반환