AS3: синтаксический анализ XML с помощью переменной команды - PullRequest
0 голосов
/ 23 октября 2011

Я выполняю некоторый анализ нагрузки уровня из 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. Тем не менее, у меня есть несколько ifferent слоев, и я хотел иметь возможность разбирать динамически, т. Е .:

dataList = typeString;

Но это не работает. но он пытается разобрать typeString из XML, а не строку "typeString". Я не вижу способа сделать то, что я пытаюсь сделать, но я подумал, что если кто-нибудь знает способ, они будут на StackOverflow.

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 02 ноября 2011

Я предполагаю, что ваш 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 голосов
/ 02 ноября 2011

Я не слишком уверен, что что-нибудь в этом формате

"LevelData."

будет работать для вас в ActionScript.Всегда рассматривайте объект как словарь, где вы делаете.

LevelData["something"] 
0 голосов
/ 24 октября 2011

Вы можете попробовать:

dataList = LevelData[layer].tile;

Совет: не используйте заглавные имена для переменных;обычно они используются с именами классов.Ваш код может запутаться, если вы смешаете их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...