2011-10-23 75 views
0

我正在從Ogmo進行一些級別的負載解析,並且遇到了問題。如果我只有一層,我可以像這樣讀取它:AS3:用變量命令解析XML

private function drawLayer(layer:String,xml:Class):void 
    { 
     var rawData:ByteArray = new xml; 
     var dataString:String = rawData.readUTFBytes(rawData.length); 
     var typeString:String = "LevelData." + layer + ".tile"; 
     trace ("Type STring:" + typeString); 
     LevelData = new XML(dataString); 

     var dataList:XMLList; 
     var dataElement:XML; 
     dataList = LevelData.terrain.tile; 
     //trace ("dataList: " + dataList); 
     for each(dataElement in dataList) 
     { tIndex = (int([email protected])/32) + ((int([email protected])/32) * 9); 
      //trace("tIndex is: " + tIndex); 
      _tiles.setTile(int([email protected])/32, int([email protected]/32), tIndex); 
     } 

其中LevelData.terrain.tile是XML解析字符串。但是,我有幾個不同層次,我想能夠動態解析,即:

dataList = typeString; 

但是,這並不起作用。但它試圖從XML中解析出typeString,而不是「typeString」字符串。我看不出有什麼辦法去做我想做的事,但我想如果有人知道一種方法,他們會在StackOverflow上。

在此先感謝!

回答

0

你可以嘗試:

dataList = LevelData[layer].tile; 

提示:不變量用大寫的名稱;通常這些與類名稱一起使用。如果你混合使用,你的代碼可能會變得混亂。

0

我假設你的XML結構如下:

<level> 
    <layer> 
     <terrain> 
      <tile/> 
     </terrain> 

     ... 

    </layer> 
</level> 

根據您的方法頭,我假定你要動態地訪問任何一層0瓷磚,或n層磚。您可以通過以下方式使用E4X:

var tiles:XMLList = levelData.layer[index]..tile; 

如果你有每一層作爲一個屬性關聯indicies:

<layer index="0"/> 

上面的語句將變成:

var tiles:XMLList = levelData.layer.(@index == 0)..tile; 

的「 ..「表達式可能會替換爲tile標記的完整路徑。

Senocular有很大的E4X頁:

http://www.senocular.com/flash/tutorials/as3withflashcs3/?page=4

0

我也不太清楚,如果以這種格式

"LevelData." 

任何事情都會在ActionScript爲你工作。在任何情況下都要將對象視爲字典。

LevelData["something"]