#xml #actionscript-3 #actionscript
#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;
Но это не работает,. но он пытается проанализировать typeString из XML, а не строку «typeString». Я не вижу способа сделать то, что я пытаюсь сделать, но я подумал, что если кто-нибудь знает способ, они будут в StackOverflow.
Заранее спасибо!
Ответ №1:
Вы могли бы попробовать:
dataList = LevelData[layer].tile;
Совет: не используйте имена переменных с заглавной буквы; обычно они используются с именами классов. Ваш код может запутаться, если вы их смешаете.
Ответ №2:
Я предполагаю, что ваш 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
Ответ №3:
Я не слишком уверен, есть ли что-нибудь в этом формате
"LevelData."
будет работать для вас в actionscript. Всегда рассматривайте объект как словарь, где вы это делаете .
LevelData["something"]