XML і FLASH: підводні камені, Програми для роботи з графікою, Програмні керівництва, статті

У статті розповідається про проблеми, з якими ви можете зіткнутися при застосуванні зв’язки 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 ситуація круто змінилася.

Висновок


Якщо ви стикаєтеся з якими-небудь проблемами, не в якому разі не опускайте руки, а намагайтеся придумати найбільш оптимальне, оригінальне, швидке і просте рішення, ну і, звичайно, не забудьте поділитися ним з іншими. Звертаючись до основ програмування, можу сказати, що якщо проблема не має свого рішення (або рішення складно реалізовується), то потрібно міняти початкові умови.

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

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*