(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
Traffic Inspector GOLD 5 Учетных записей
Allround Automation PL/SQL Developer - 5 user license
Allround Automation Direct Oracle Access Standard license
TeeBI for RAD Studio Suite with source code single license
TeeChart for .NET Standard Business Edition 2017 single license
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование в AutoCAD
Компьютерный дизайн - Все графические редакторы
Delphi - проблемы и решения
Все о PHP и даже больше
Windows и Office: новости и советы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100