AS3:使用变量命令解析XML

时间:2011-10-23 19:21:26

标签: xml actionscript-3 actionscript

我正在从Ogmo进行一些级别的负载解析,我遇到了一个问题。如果我只有一层,我可以这样读:

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(dataElement.@tx) / 32) + ((int(dataElement.@ty) / 32) * 9);
            //trace("tIndex is: " + tIndex); 
            _tiles.setTile(int(dataElement.@x) / 32, int(dataElement.@y / 32), tIndex);
        }

LevelData.terrain.tile是XML解析字符串。但是,我有一些不同的层,我希望能够动态解析,即:

dataList = typeString;

但这不起作用。但它试图从XML中解析typeString,而不是“typeString”字符串。我无法看到一种方法来做我想做的事情,但我想如果有人知道某种方式,他们就会在StackOverflow上。

提前致谢!

3 个答案:

答案 0 :(得分:0)

你可以尝试:

dataList = LevelData[layer].tile;

提示:不要对变量使用大写名称;通常那些与类名一起使用。如果你把它们混合起来,你的代码可能会让人感到困惑。

答案 1 :(得分: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;

“...”表达式可以替换为tile标记的完整路径。

Senocular有一个很棒的E4X页面:

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

答案 2 :(得分:0)

我不太确定这种格式是否有什么

"LevelData."

将在actionscript中为你工作。始终将对象视为字典。

LevelData["something"]