Встраивание XML в AS3
Решение задачи я нашел в блоге Мэта Торсона (Matt Thorson) в посте Embedding XML in AS3. В принципе на этом можно было бы и остановиться, но для удобства я переработал статью на русский язык.
Есть две предпосылки:
- Несложные уровни, списки игровых предметов и т.п. удобно хранить и редактировать в отдельных файлах не связанных с кодом игры. Наиболее универсальным форматом для хранения является XML.
- Готовая игра должна состоять из одного swf файла и не должна обращаться к файлам, которые находятся на других серверах иначе ее не примут большинство игровых порталов.
Эти две предпосылки несколько противоречат друг другу, но во Flash есть удобный выход из ситуации. Во время разработки данные хранятся в отдельном XML файле, а во время сборки swf файла XML файл встраивается туда. Выглядит это так:
public class Levels { [Embed(source='level_01.xml', mimeType="application/octet-stream")] public static const Level1:Class; }
Ключевой является первая строка в классе. Embed имеет 2 параметра: имя встраиваемого файла и его тип. Имя может содержать относительный путь к файлу, а тип лучше оставить «application/octet-stream». Он означает, что все данные будут сохранены в виде потока байта без всяких дополнительных преобразований.
Теперь встроенный файл можно прочесть:
var file:ByteArray = new Levels.Level1; var strXML:String = file.readUTFBytes( file.length );
В первой строке мы загружаем его в память, как массив байт, а во второй преобразуем в строку.
Теперь из XML можно прочесть нужные нам значения. Допустим в файле level_01.xml хранятся следующие данные:
<LEVEL> <OBJECTS> <BLOCK X="2" Y="23" WIDTH="36" HEIGHT="4" /> <BLOCK X="12" Y="21" WIDTH="4" HEIGHT="2" /> </OBJECTS> </LEVEL>
В «Объекте» находиться описание двух «блоков». Мы можем рассчитывать, что XML файл будет иметь фиксированную структуру, поэтому для удобства можем обращаться к тегам по их именам. Следующий код выводит параметры тега :
var xml:XML = new XML( strXML ); var block:XML; for each (block in xml.OBJECTS[0].BLOCK) { trace(block.@X); trace(block.@Y); trace(block.@WIDTH); trace(block.@HEIGHT); }
Переменную strXML мы получили при чтение XML файла. Символ @ используется для доступа к атрибутам тега.








Спасибо Вам большое за статью, я начинающий и как раз на этом месте с xml у меня была затыка =)