|
|
|||||
Странное поведение XML / циклов
Эм... Дело обстоит так. Загружаю 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,784
|
Боже мой, клинопись какая-то и не лень было копипастить _root["block"+b+"_mc"] и _root["cat"+c+"_mc"] тыщу раз, напрягая мозг и машину?
|
|
|||||
__etc А как стоило бы сделать?
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Выделить отдельные ссылки, для начала, чтобы не тащить эту громоздкую конструкцию сквозь весь код.
|
|
|||||
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,784
|
В том числе. И разбираться в нём противно.
|
Часовой пояс GMT +4, время: 11:06. |
|
« Предыдущая тема | Следующая тема » |
Теги |
xml |
|
|