2011-10-23 3 views
0

Ogmoからレベルロード解析を行っていて、問題が発生しました。 LevelData.terrain.tileは、XMLの解析文字列である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); 
     } 

:私はただ一つの層を持っている場合、私はこのようにそれを読むことができます。しかし、いくつかの層があり、動的に解析できるようにしたいと考えていました。つまり

しかし、これは機能しません。 "typeString"文字列ではなく、XMLから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; 

あなたは属性として、各レイヤに関連したなインデックスを持っている場合:

<layer index="0"/> 

上記の文になることができます:

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

」 .. "式は、タイルタグへの完全なパスで置き換えることができます。

Senocularは素晴らしいE4Xページを持っています

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

0

私はこの形式では何も

"LevelData." 

は、ActionScriptであなたのために動作するかどうあまりにもわかりません。あなたが行っている辞書は、常にオブジェクトとみなされます。

LevelData["something"]