Узел XML: применяем атрибуты к мувиклипу

 

Cначала пару слов о том, что такое XML. В принципе я и сам не особо вдавался в подробности, поэтому нижесказанное не претендует на полноту и достовернось.

Вам только кажется, что вы не знаете что такое XML, если конечно вам так кажется. Если вы знаете, что такое HTML, то вы в курсе, что такое XML, поскольку HTML - это частный случай XML. И тот и другой вид разметки документа требуют парсинга (разбора и применения атрибутов к объектам), Однако HTML парсит броузер, а XML нужно парсить самим. В этом есть своя прелесть. Потому, что используя XML мы можем создавать любые свойства, а не только продиктованные стандартом HTML, задавать им значения и применять их к любым объектам, в том числе и во Flash.

Сегодня на примере функции обработки одного узла (в HTML это называется тегом) мы рассмотрим как это можно сделать.

 

xmlTmp = new XML("<tree><mc1 _x='10' _y='20' _rotation='-10' status='busy'></mc1><mc2 _x='20' _y='40' _rotation='40'></mc2><mc3 _x='30' _y='50' _rotation='60'></mc3><mc4 _x='80' _y='80' _rotation='-115' status='busy'></mc4><mc5 _x='150' _y='120' _rotation='20' status='busy'></mc5></tree>");// создаем объект XML, который содержит описание свойств пЯти мувиклипов. Обратите внимание, что мы сразу пишем имена свойств мувиклипов так же как и во флеш, типа _x, _rotation. (XML может быть, и чаще всего бывает внешним файлом, так с ним удобней работать.)

 

XMLNode.prototype.applyProp = applyProp; // помещаем в прототип XML узла функцию переноса свойств из XML в мувиклип, заданную ниже

function applyProp (to) { // задаем функцию с аргументом to, в который будем помещать ссылку на мувиклип

// вначале, длЯ упрощениЯ обращениЯ к объектам:

var a = this.attributes; // помещаем в переменную a ссылку на массив атрибтов узла. Обратите внимание, что this в данном случае - это узел XML, поскольку мы первой строкой скрипта эту функцию поместили в прототип узла, и вызывать ее будем используЯ следующий синтаксис: узелXML.имЯФункции(ссылка на мувиклип)

var b = eval(to); // помещаем в переменную b ссылку на мувиклип, в который будем помещать новые свойства

var vars; // объЯвлЯем локальную переменную (она помрет по завершении работы функции)

var val; // и еще одну

 

for (vars in a) { // последовательно присваиваем переменной vars все значениЯ имен атрибутов в массиве атрибутов

val = a[vars];// последовательно присваиваем переменной val значениЯ соответствующих атрибутов

if (isNaN(Number(val))) {// если значение аттрибута не конвертируетсЯ из string в number, то это строка и

b[vars] = val;// присваиваем переменной с именем атрибута значение атрибута

} else {// иначе

b[vars] = Number(val);// присваиваем переменной с именем атрибута конвертированное в number значение атрибута

}

}

}

nod = xmlTmp.firstChild.firstChild; // присваиваем переменной ссылку на узел XML

while (nod) { // пока не переберем все узлы

name = nod.nodeName;// помещаем имЯ узла в переменную

this.attachMovie("mc", name, i++); // помещаем из библиотеки линкованный мувик имеющий идентификатор mc, задаем ему то же имЯ что и узел.

nod.applyProp(this[name]); // вызываем из узла нашу функцию и передаем ей через параметр ссылку на мувиклип

nod = nod.nextSibling; // переходим на следующий узел

}

// удалЯем ненужные больше объекты:

delete xmlTmp;

delete i;

delete nod;

delete name

 

в этот раз мы не рассмотрели как правильно обойти всё дерево XML, да это и не требовалось. Зато мы побывали в самом сердце XML - в узле, взяли его атрибуты и поместили их в свойства мувиклипа.

Задание будет таким: попробуйте сами создать в узлах дополнительный атрибут с именем _alpha и присвойте ему значения по своему усмотрению. Создайте также текстовое поле в мувиклипе и поместите в него значение еще одного атрибута из XML, имя и значение этого атрибута выберите по собственному усмотрению.

 

Hosted by uCoz