(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

XML и FLASH: подводные камни

Источник: flasher

В статье рассказывается о проблемах, с которыми вы можете столкнуться при применении связки xml + flash.
Я постараюсь осветить наиболее популярные проблемы и расскажу о их решении. //весь код тестировался на Macromedia Flash 7.0.1 b46-a, as-v1.0

Как известно чтобы меньше времени тратить на исправление ошибок, нужно эти самые ошибки не допускать, ну или, как говориться, учиться на чужих ошибках, вот этим и займёмся. Большинство ошибок в своём корне -это просто невнимательность, неосторожность или необдуманность принимаемых решений, так что прежде чем что-то сделать, нужно подумать о последствиях сделанного, так, например, когда вы создаёте xml объект и загружаете в него xml файл для дальнейшего использования, нередко возникает вопрос: "... а почему же xml не загрузился?". На него нельзя ответить однозначно, так как всё зависит от начальных условий. В первую очередь проверьте правильность имени файла загружаемого вами:

xmlObject = new XML();
xmlObject.load("xmlfile.xml");

если вы допустили ошибку в написании имени, то исправьте его, так же следует обратить внимание на регистр букв используемых в имени файла, так как для некоторых файловых систем (напр. ext3, ext2) регистр букв имеет значение; таким образом, XmlFile.xml и xmlfile.xml это 2 разных файла. Следующей причиной может стать не существование самого xml файла. Далее вы можете столкнуться с тем что когда вы отлаживали флешку на локальной машине всё грузилось, а когда залили её в инет то xml грузиться перестал; тут всё очевидно - вам нужно написать прелоадер для xml.

Я приведу пример простенького прелоадера, который помимо xml ещё и следит за загрузкой самого swf:

Чтобы приготовить наш прелоадер нам нужно:
* Создать новый фильм
* Создать в нём 2 сцены (insert->scene)
* В первой сцене мы расположим то, что нужно загрузить, а во второй всё это обработаем.
* Далее в 1 кадре 1 сцены (обзовем её preloader) пишем такой код:
myxml = new XML();
myxml.load("xmlfile.xml");
* Затем создадим мувиклип и в нём сделаем 3 кадра, в 1 кадре разместим следуюший код:
_root.stop();
var percents = 0.0;
* Во 2 кадре напишим такой экшн:
if (_root.getBytesLoaded() == _root.getBytesTotal()) {
percents = percents+5.0;
if (percents>100.0) {
percents = 100.0;
}
} else {
percents = Math.floor(_root.getBytesLoaded()/_root.getBytesTotal()*100.0);
}
* Всё это стандартные участки кода для простейшего прелоадера, их описания можно найти в многочисленных мануалах.
И наконец 3 кадр заполняем кодом:
if (percents<100.0 // _root.myxml.loaded == false) {
gotoAndPlay(2);
} else {
_visible = false;
_root.play();
stop();
}

Вот и готов наш прелоадер, принцип работы простой: всё как обычно за исключением 3 кадра, там мы просто в условие добавляем параметр. И таким образом у нас получается если(проценты < 100 ИЛИ xml-файл не загружен) { ждём; }.
Думаю, как поступить, если у вас не одни xml файл понятно:)

Ещё к проблемам загрузки внешних данных (не только xml) можно отнести такой любопытный факт: когда ваши файлы храняться в директории с именем cgi или cgi-bin то (!) флеш не хочет их загружать! Думаю это связано с внутренними механизмами зашиты flash (подробней об этом можно узнать из книги Колина Мука "ActionScript - справочник по языку"), так что лучше во избежание конфликтов размещать свои файлы в директориях с другими именами (я, например, даю имя директории в зависимости от того, какой внешний источник применяется).

Ну вот наконец-то мы загрузили наш xml, чтобы удостовериться в этом, как говорится, воочию проделаем такие нехитрые действия:
* Зайдите в параметры экспортирования (file->publish settings или Ctrl+Shift+F12) и на вкладке Format в поле Type поставьте флажок рядом с полем Flash, а все остальные уберите и нажмите на кнопку OK.
* Далее нажмите F12 (или любую другую кнопку настроенную у вас на экспортирование) и мы переместимся в отдельное окно, где выполняется наш флеш фильм.
* И последним нашим действием будет вызов меню Debug->List Variables (или Ctrl+alt+V), появится окно Output, в котором будут содержаться все переменные как либо фигурировавшие в этом фильме; из всего многообразия вам нужно будет выбрать строку, где написано имя вашего xml объекта, например:

OutPut
------------------------------------------------------------------------------------------------------
Variable _level0.myxml.myxml = [object #0] {






}

Когда мы убедимся что, всё загружено и работает, то настало время приступить к обработке данных xml.
Вот тут то и начинаются многочисленные проблемы. Ну, во-первых, нужно проверить правильно ли вы составили xml файл или нет, если всё правильно то имеет смысл искать ошибку в строке обращения (так называемый xml путь). Путь обращения зависит от уровня вложения узлов xml, приведу пример обращения к такому xml:

ActionScript один из вариантов реализации:

var info = xmlObject.firstChild.firstChild.attributes.param;

info - переменная, в которую будет записано значение
xmlObject - xml обьект
.firstChild - элемент
.firstChild.firstChild - элемент
.firstChild.firstChild.attributes.param - элемент value.

Если у вас присутствует большое количество элементов обращаться к ним по одному не удобно и громоздко, по этому напишем переборщик элементов:

for (var i = 0; i myArray[i] = xmlObject.firstChild.childNodes[i].attributes.param;
}

Из кода видно, что каждому элементу массива myArray начиная с 0 будет присвоено значение параметра param из каждого узла.

<ХМЛ>
<УЗЕЛ_1 param="ЗНАЧЕНИЕ"/>
<УЗЕЛ_2 param="ЗНАЧЕНИЕ"/>
<УЗЕЛ_3 param="ЗНАЧЕНИЕ"/>
<УЗЕЛ_4 param="ЗНАЧЕНИЕ"/>
<УЗЕЛ_5 param="ЗНАЧЕНИЕ"/>
<УЗЕЛ_6 param="ЗНАЧЕНИЕ"/>
<УЗЕЛ_7 param="ЗНАЧЕНИЕ"/>
<УЗЕЛ_N param="ЗНАЧЕНИЕ"/>

---

xmlObject.firstChild.childNodes.length = 7
myArray[0] = ЗНАЧЕНИЕ
myArray[1] = ЗНАЧЕНИЕ
myArray[2] = ЗНАЧЕНИЕ
myArray[3] = ЗНАЧЕНИЕ
myArray[4] = ЗНАЧЕНИЕ
myArray[5] = ЗНАЧЕНИЕ
myArray[6] = ЗНАЧЕНИЕ
myArray[7] = ЗНАЧЕНИЕ

Ну вот мы и справились с возникшими проблемами, но это далеко не всё, что может помешать вам в достижении заветной цели. Так, например, в разных версиях flash player разная кодировка файла xml даёт совершенно непредсказуемые результаты обработки содержимого, на основе собственных наблюдения могу сказать, что flash player версии 1-5 хорошо работает с внешними данными поступающими в кодировке UTF-8, а flash player 6 и выше, предпочтительней работает с кодировкой UNICODE, в этом есть свои минусы и плюсы (в прочем, как и везде), вот, например когда я применял файлы в кодировке UTF-8 они читались многими старыми плеерами без проблем и отображались в браузерах, но русская буква "Я" никак не хотела отображаться, но с приходом UNICODE ситуация круто изменилась.

Заключение

Если вы сталкиваетесь с какими-либо проблемами, не в коем случае не опускайте руки, а старайтесь придумать наиболее оптимальное, оригинальное, быстрое и простое решение, ну и, конечно, не забудьте поделиться им с другими. Обращаясь к основам программирования, могу сказать, что если проблема не имеет своего решения (или решение сложно реализуемо), то нужно менять начальные условия.

Весёлого программирования!

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 05.01.2007 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
IBM Domino Enterprise Server Processor Value Unit (PVU) License + SW Subscription & Support 12 Months
GFI LanGuard подписка на 1 год (25-49 лицензий)
SAP CRYSTAL Server 2013 WIN INTL 5 CAL License
Raize Components 6
КОМПАС-3D v17 Home
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование в AutoCAD
Компьютерный дизайн - Все графические редакторы
Реестр Windows. Секреты работы на компьютере
Все о PHP и даже больше
Краткие описания программ и ссылки на них
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100