Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.06.2008, 22:03
E.Q. вне форума Посмотреть профиль Отправить личное сообщение для E.Q. Посетить домашнюю страницу E.Q. Найти все сообщения от E.Q.
  № 1  
Ответить с цитированием
E.Q.
 
Аватар для E.Q.

Регистрация: Feb 2006
Сообщений: 424
Отправить сообщение для E.Q. с помощью ICQ
По умолчанию Странное поведение 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:

Непонятно, почему трэйсом все нормально выводится, а при выстраивании клипов такое разнообразие?
А самое неподдающееся моему объяснению на последних двух скринах - xml обрабатывается как будто кусками... Может ктонибудь может дать мне совет или объяснение происходящего?
И еще вопрос, может ли флешка вести себя по разному на разных компьютерах (имеется в виду железо)?

Старый 29.06.2008, 22:05
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Боже мой, клинопись какая-то и не лень было копипастить _root["block"+b+"_mc"] и _root["cat"+c+"_mc"] тыщу раз, напрягая мозг и машину?

Старый 29.06.2008, 22:18
E.Q. вне форума Посмотреть профиль Отправить личное сообщение для E.Q. Посетить домашнюю страницу E.Q. Найти все сообщения от E.Q.
  № 3  
Ответить с цитированием
E.Q.
 
Аватар для E.Q.

Регистрация: Feb 2006
Сообщений: 424
Отправить сообщение для E.Q. с помощью ICQ
__etc А как стоило бы сделать?

Старый 29.06.2008, 22:22
MrPoma вне форума Посмотреть профиль Отправить личное сообщение для MrPoma Посетить домашнюю страницу MrPoma Найти все сообщения от MrPoma
  № 4  
Ответить с цитированием
MrPoma
 
Аватар для MrPoma

Регистрация: Jul 2006
Адрес: Питер
Сообщений: 2,083
Отправить сообщение для MrPoma с помощью Skype™
Сделать функцию createBlock() и передавать ей значения.
__________________
жж | твттр | гглплс | фсбк | вкнткт | гтхб

Старый 29.06.2008, 22:29
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от E.Q. Посмотреть сообщение
__etc А как стоило бы сделать?
Выделить отдельные ссылки, для начала, чтобы не тащить эту громоздкую конструкцию сквозь весь код.

Старый 29.06.2008, 23:21
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код:
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;

			}
		}
	}
}
Просто find-and-replace. Но, на самом деле можно было и красивше и короче =)
__________________
Hell is the possibility of sanity

Старый 29.06.2008, 23:27
E.Q. вне форума Посмотреть профиль Отправить личное сообщение для E.Q. Посетить домашнюю страницу E.Q. Найти все сообщения от E.Q.
  № 7  
Ответить с цитированием
E.Q.
 
Аватар для E.Q.

Регистрация: Feb 2006
Сообщений: 424
Отправить сообщение для E.Q. с помощью ICQ
Мммм. Пасибо. Просто уже около года не занимался Флесчем. Теперь буду разбираться.
Значит, все это проблемы громоздкого кода?

Старый 30.06.2008, 01:32
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
я думаю, что проблема была в том, что getNextHighestDepth() вызывался непонятно откуда (если проблема решилась), я просто дописал спереди _root, но как бы это тоже плохое решение, просто я не знаю как там у вас и чего =)
А вообще, нормальный способ решения такой задачи:
2 функции:
парсер и генератор.
парсер : читает ХМЛ и вызывает генератор с нужными параметрами.
генератор : на основе полученых параметров создает новый объект.
__________________
Hell is the possibility of sanity

Старый 30.06.2008, 01:38
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от E.Q. Посмотреть сообщение
Значит, все это проблемы громоздкого кода?
В том числе. И разбираться в нём противно.

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
xml
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 03:46.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.