2014-03-16 2 views
0

작동하지 않습니다는 :AS3 : XML 파싱 그냥이 코드를 사용하고

private function loadLevel(xml:Class):void 
{ 
    var rawData:ByteArray = new xml; 
    var dataString:String = rawData.readUTFBytes(rawData.length); 
    var xmlData:XML = new XML(dataString); 

    var dataList:XMLList; 
    var dataElement:XML; 

    dataList = xmlData.Tiles.tile; 

    for each(dataElement in dataList) 
    { 
     trace("HI"); 
     _tiles.setTile(int([email protected])/120, int([email protected])/120, int([email protected])/120); 
    } 
} 

하지만 난 흔적을 얻을! https://www.youtube.com/watch?v=Ek0HLk6wBmQ 왜 내가 추적 문을 수신하지 못하는 경우

<?xml version="1.0" encoding="UTF-8"?> 
<map version="1.0" orientation="orthogonal" width="16" height="9" tilewidth="120"  tileheight="120"> 
<tileset firstgid="1" name="u" tilewidth="120" tileheight="120"> 
    <image source="../assets/tileset1.png" width="360" height="120"/> 
</tileset> 
<layer name="Tiles" width="16" height="9"> 
    <data> 
    <tile gid="2"/> 
    <tile gid="2"/> 
    blablabla repeat 
    </data> 
</layer> 
<objectgroup name="Spawn" width="16" height="9"> 
    <object x="120" y="892" width="122" height="28"/> 
    <object x="2222" y="-244"/> 
</objectgroup> 
</map> 

내가이 튜토리얼을 따라 :

이것은 TMX 파일입니다? 그냥 작동하지 않습니다

+0

그리고'XML Tiles'in 귀하가 제공 한입니까? 'tile_name' -'xmlData.layer.data.tile'이 필요하면 –

+0

답변

1

<layer name="Tiles" width="16" height="9"> 요소에 액세스 하시겠습니까? 당신이이 요소에 액세스하려면이

for each(var element:XML in xmlData.layer.data.tile) 
{ 
    trace([email protected]); 
} 

시도이 요소

<tile gid="2"/> 
<tile gid="2"/> 

에 액세스하려면

권리 경우,이

var xmlData:XML = new XML(dataString); 

var name:String = [email protected]; 
var width:int = [email protected]; 
var height:int = [email protected]; 

을 시도합니다. 먼저 두 번째 노드와 동일한 요소를 일치 시키면 width 및 height 특성이 추가됩니다.

<object x="120" y="892" width="122" height="28"/> 
<object x="2222" y="-244" widht="200" height"400"/> 

그리고이

for each(var element:XML in xmlData.objectgroup.object) 
{ 
    trace("x: " + [email protected] + " y: " + [email protected] + " width: " + [email protected] + " height: " + [email protected]); 
} 

이 튜토리얼 시도는 당신을 도울 것입니다 이해 (ECMA XML에 대한) 구문은 ActionScript 3.0 E4X입니다.


편집

나는 당신의 문제를 이야기한다. 아래를보십시오. XML Tiles 노드를 가지고 있지 때문에

  1. dataList = xmlData.Tiles.tile;은 잘못된 것입니다.

  2. 참조 xml, tile 노드는이 구문으로 만 액세스 할 수 있습니다 : xmlData.layer.data.tile. 그러나, 당신은 xmlData.layer.data.tile 반환 배열을 그래서 두 타일 노드가 있습니다. 따라서 첫 번째 타일 노드는 xmlData.layer.data.tile [0]이고 두 번째 타일 노드는 xmlData.layer.data.tile [1]입니다.

  3. tile 노드는 x, y, tx 속성이 없습니다. 노드는 object입니다. 그러나 tx은 어디에도 나타나지 않습니다.

p.s : 당신은 ... 튜토리얼 알고리즘이 비디오에 지정된 XML을 기반으로 비디오에 같은과 같은 XML을 작성해야합니다. 하지만,이 문제를 해결하기 전에 나는 가정했다. AS3.0 E4X를 이해해야합니다.

E4X 자습서 :

http://code.tutsplus.com/tutorials/as3-101-xml-basix--active-2908 http://www.kirupa.com/developer/flashcs3/using_xml_as3_pg1.htm http://www.republicofcode.com/tutorials/flash/as3xml/

+0

멋진데, 나는 약간 혼란 스러워요. 당신의 대답에 몇 가지 새로운 변수가 있습니다. _tiles.setTile (int (dataElement. @ x)/120, int (dataElement. @ y)/120, int (dataElement. @ tx) 타일에 숫자 1을 붙이려면 다음과 같이하십시오.)/120); - 숫자 1 타일 만 사용하면 어떻게 타이핑 할 수 있습니까? – user3123633

+0

XML을 좀 더 세련되게 만들 필요가 있다고 생각합니다. 이제는 구조가 직관적이지 않습니다. 'setTile' 함수는 XML의'tx' 속성에 대한 각 인수의 의미는 무엇입니까? –

+0

설명 방법을 잘 모르겠습니다. 이 youtube 비디오를 확인하는 경우 : https://www.youtube.com/watch?v=Ek0HLk6wBmQ @ 10:11 - 그러면 무슨 일이 일어나는지보실 수 있습니다. 나는 그 튜토리얼을 따라 가고있다. 하지만 OGMO 편집기를 사용하고 있지 않습니다. 나는 TILED를 사용하고있다. – user3123633