![]() |
|
||||||||||
|
|||||
|
Эм... Дело обстоит так. Загружаю xml-файл, все прекрасно читается, и по нему выстраиваются клипы на сцене.
Все строится тремя циклами, соответственно три уровня иерархии. function chainReaction() {
// Установка положений объектов
// Фонового листа
_root.sheet_mc._y = Stage.height/2-_root.sheet_mc._height/2;
_root.sheet_mc._x = 10;
//Цикл создания блоков
for (var b = 0; b<_root.h_xml.firstChild.childNodes.length; b++) {
trace("block "+b);
_root.attachMovie("block","block"+b+"_mc",getNextHighestDepth());
_root["block"+b+"_mc"]._y = _root.sheet_mc._y+11;
_root["block"+b+"_mc"]._x = _root.sheet_mc._x+_root["block"+b+"_mc"]._width*b;
_root.vertHeit = _root["block"+b+"_mc"]._y;
trace("block y = "+_root["block"+b+"_mc"]._y);
//Цикл создания категорий
for (var c = 0; c<_root.h_xml.firstChild.childNodes[b].childNodes.length; c++) {
trace("+ category "+c+" "+_root.h_xml.firstChild.childNodes[b].childNodes[c].attributes.ttl);
_root.attachMovie("category","cat"+c+"_mc",getNextHighestDepth());
_root["cat"+c+"_mc"]._y = _root.vertHeit;
_root.vertHeit += 20;
_root["cat"+c+"_mc"]._x = _root["block"+b+"_mc"]._x+_root["block"+b+"_mc"]._width/2-_root["cat"+c+"_mc"]._width/2;
_root["cat"+c+"_mc"].txt.text = _root.h_xml.firstChild.childNodes[b].childNodes[c].attributes.ttl;
//Цикл создания ссылок
for (var k = 0; k<_root.h_xml.firstChild.childNodes[b].childNodes[c].childNodes.length; k++) {
trace(" + link "+k+" "+_root.h_xml.firstChild.childNodes[b].childNodes[c].childNodes[k].attributes.site+" y="+_root.vertHeit);
_root.attachMovie("link","link"+k+"_mc",getNextHighestDepth());
_root["link"+k+"_mc"]._y = _root.vertHeit;
_root.vertHeit += 15;
_root["link"+k+"_mc"]._x = _root["cat"+c+"_mc"]._x;
_root["link"+k+"_mc"].txt.text = _root.h_xml.firstChild.childNodes[b].childNodes[c].childNodes[k].attributes.site;
}
}
}
}
Непонятно, почему трэйсом все нормально выводится, а при выстраивании клипов такое разнообразие? А самое неподдающееся моему объяснению на последних двух скринах - xml обрабатывается как будто кусками... Может ктонибудь может дать мне совет или объяснение происходящего? И еще вопрос, может ли флешка вести себя по разному на разных компьютерах (имеется в виду железо)? |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Боже мой, клинопись какая-то и не лень было копипастить _root["block"+b+"_mc"] и _root["cat"+c+"_mc"] тыщу раз, напрягая мозг и машину?
|
|
|||||
|
__etc А как стоило бы сделать?
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Выделить отдельные ссылки, для начала, чтобы не тащить эту громоздкую конструкцию сквозь весь код.
|
|
|||||
|
Modus ponens
|
function chainReaction() {
// Установка положений объектов
// Фонового листа
var mc:MovieClip = _root.sheet_mc;
var nmc:MovieClip;
var nmc0:MovieClip;
var nmc00:MovieClip;
var xml:XMLNode = _root.h_xml.firstChild;
var xml0:XMLNode;
var xml00:XMLNode;
var i:Number;
var c:Number;
var k:Number;
var l:Number = xml.childNodes.length;
var l0:Number;
var l00:Number;
mc._y = Stage.height/2 - mc._height/2;
mc._x = 10;
//Цикл создания блоков
for (i = 0; i < l; i++) {
trace("block " + i);
nmc = _root.attachMovie("block", "block" + i + "_mc", _root.getNextHighestDepth());
nmc._y = mc._y + 11;
nmc._x = mc._x + nmc._width * i;
_root.vertHeit = nmc._y;
trace("block y = " + nmc._y);
//Цикл создания категорий
xml0 = xml.childNodes[i];
l0 = xml0.childNodes.length;
for (c = 0; c < l0; c++) {
trace("+ category " + c + " " + xml0.childNodes[c].attributes.ttl);
nmc0 = _root.attachMovie("category", "cat" + c + "_mc", _root.getNextHighestDepth());
nmc0._y = _root.vertHeit;
_root.vertHeit += 20;
nmc0._x = nmc._x + nmc._width/2 - nmc0._width/2;
nmc0.txt.text = xml0.childNodes[c].attributes.ttl;
//Цикл создания ссылок
xml00 = xml0.childNodes[c];
l00 = xml00.childNodes.length;
for (var k = 0; k < l00; k++) {
trace(" + link " + k + " " + xml00.childNodes[k].attributes.site + " y=" + _root.vertHeit);
nmc00 = _root.attachMovie("link", "link" + k + "_mc", _root.getNextHighestDepth());
nmc00._y = _root.vertHeit;
_root.vertHeit += 15;
nmc00._x = nmc0._x;
nmc00.txt.text = xml00.childNodes[k].attributes.site;
}
}
}
}
__________________
Hell is the possibility of sanity |
|
|||||
|
Мммм. Пасибо. Просто уже около года не занимался Флесчем. Теперь буду разбираться.
Значит, все это проблемы громоздкого кода? |
|
|||||
|
Modus ponens
|
я думаю, что проблема была в том, что getNextHighestDepth() вызывался непонятно откуда (если проблема решилась), я просто дописал спереди _root, но как бы это тоже плохое решение, просто я не знаю как там у вас и чего =)
А вообще, нормальный способ решения такой задачи: 2 функции: парсер и генератор. парсер : читает ХМЛ и вызывает генератор с нужными параметрами. генератор : на основе полученых параметров создает новый объект.
__________________
Hell is the possibility of sanity |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
В том числе. И разбираться в нём противно.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 17:54. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| xml |
|
|