Опубликован: 07.11.2006 | Уровень: специалист | Доступ: платный
Лекция 6:

Движемся дальше

XML

Теперь мы приступим к компиляции окончательной версии нашего сайта. Если мы хотим сделать представление изображений динамическим, имеет смысл сохранять список рисунков отдельно от фильма Flash и загружать рисунки по мере надобности.

XML является самым удобным способом работы с параметрами изображений, такими как ширина, высота и заголовок. В разрабатываемом здесь приложении мы сконцентрируемся на загрузке данных XML для реализации наших целей. В "XML" более подробно рассказывается об использовании XML совместно с Flash MX; в ней вы также изучите некоторые из правил и решений, важных при работе с данными XML. Если вы впервые столкнулись с XML, вам будет лучше ознакомиться с несколькими первыми страницами "XML" перед изучением данной темы.

Можно очень просто описать список рисунков с помощью XML. Каждое изображение будет иметь свой собственный узел, содержащий атрибуты для своего имени файла и названия. Каждый узел будет выглядеть примерно так.

<picture file="denim001.jpg" name="whatever"/>

Приведенный выше код XML содержит информацию об имени файла изображения, его ширине и высоте, а также о назначенном изображению названии, если таковое имеется. Знак " означает начало узла, так же, как и в HTML, а его окончание обозначается знаком /". picture означает тип данного узла, аналогично тому, как b означает жирный шрифт в HTML.

Полный код XML будет состоять из нескольких таких элементов, объединенных в корневой элемент pictures. Введите этот текст в текстовый файл и сохраните его под именем pictures.xml.

<pictures>
        <picture	file="denim001.jpg"	name="whatever"/>
        <picture	fiie="denim002.jpg"	name="whatever"/>
        <picture	file="denim003.jpg"	name="whatever"/>
        <picture	file="denim004.jpg"	name="whatever"/>
        <picture	file="denim005.jpg"	name="whatever"/>
        <picture	file="denim006.jpg"	name="whatever"/>
        <picture	file="denim007.jpg"	name="whatever"/>
        <picture	file="denim008.jpg"	name="whatever"/>
    </pictures>

Вы только что создали простой файл XML. Если вы откроете файл pictures.xm l в браузере, вы увидите иерархическое описание информации.


Заметьте, что здесь есть значок +/-, на котором вы можете щелкать для открытия или закрытия структуры документа и вывода связанной информации. Сам по себе этот документ не представляет особого интереса. Данные XML становятся полезными лишь тогда, когда они обрабатываются каким-либо другим приложением.

Разберемся, как можно использовать эти данные во Flash.

Добавление данных XML во Flash

Структуру XML нужно импортировать во Flash и затем преобразовать информацию в данные, которые можно использовать, т.е. в массив объектов изображений.

  1. Создадим новый объект, в который будем загружать документ XML.
    myXml = newXml();
        myXml.load ("pictures.xml");

    Это действие добавит документ XML, но после полной загрузки нам необходимо вызывать функцию.

  2. Для вызова функции по завершении загрузки документа XML мы можем использовать управляющий элемент onLoad объекта XML. Как и в случае с управляющими элементами событий фильма, мы можем определить функцию для ее вызова при возникновении данного события.
    myXml = new Xml();
        // call parseMe once xml has loaded
        myXml.onLoad = parseMe;
        myXml.load("pictures.xml");
        function parseMe() {
        }
  3. Перед созданием функции parseMe нужно добавить одну или более строк кода для обеспечения игнорирования всех пустых мест в исходном файле XML (к примеру, возврат каретки или табуляция).
    myXml = new Xml();
        myXml.ignoreWhite = true;
        myXml.onLoad = parseMe;
        myXml.load("pictures.xml");
        function parseMe() {
        }
  4. Функция parseMe должна раскрывать соответствующую информацию из каждого узла изображения и сохранять его, поэтому мы также создадим массив для хранения в нем данных.
    pictureObjects = [];
        myXml = new Xml();
        myXml.ignoreWhite = true;
        myXml.onLoad = parseMe;
        myXml.load("pictures.xml");
        function parseMe() {
        }
  5. При вызове функции parseMe наша цель находится внутри объекта XML, поэтому, если мы используем this, то получим список всего документа. Введите этот код под имеющимся кодом.
    function parseMe()	{
            trace(this);
        }

    Если вы сохраните фильм в той же папке, где сохранили pictures.xml, и запустите его, то увидите строку в окне Output, содержащую всю информацию внутри pictures.xml.

    Однако в объекте XML имеется гораздо больше возможностей. При импортировании документа XML во Flash последний обрабатывает документ и создает из него структуру объекта, причем каждый узел ссылается на свои дочерние узлы, на братьев и на родителей, равно как и на атрибуты, которые могут иметь узлы.

Игорь Хан
Игорь Хан

у меня аналогичная ситуация. Однако, если взять пример из приложения (ball_motion_04_click for trial.fla) то след остается. при этом заметил, что в моем проекте в поле "One item in library" виден кружок, в то время как в приложенном примере такого кружка нет.

Вопрос знатокам, что не так?

Александр Коргапольцев
Александр Коргапольцев

объект созданый мной упорно не желает оставлять след(единственное что добился, так это то что шарик резво гоняется за курсором) функция duplicateMovieClip остаётся не активной, т.е. следа от объекта не остаётся, но если я тоже самый код вбиваю в учебный файл всё работает, не могу понять где я ошибаюсь и почему в документе созданном заново, не работает код начиная от функции duplicateMovieClip? 

Тамара Ионова
Тамара Ионова
Россия, Нижний Новгород, НГПУ, 2009
Магомед Алисултанов
Магомед Алисултанов
Россия, Волгоград, лицей 2