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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.12.2006, 21:21
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 1  
Ответить с цитированием
dacino

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
Question как красиво дерево обойти

есть дерево с неизвестным уровнем вложенности(знаем его корень), подскажите оптимальный алгоритм для решения такой задачи -
1 - нужно элемент расположеныый на самом верхнем уровне
2 - от верхнего элемента дойти до корня перебрав все элементы данного дерева
возможно ли обойтись без 2-х рекурсий

откомпилите исходник(добавив предварительно в либаре баттон) в режиме отладки и немного пожмакав эту самую кнопочку, вы увидете то самое дерево (его корень ...c_mc.inp), которое надо обойти, и не ругайте меня за выделение функций в класс Draw(понимаю, что можно было обойтись и #include) Другие замечания приветствуются
у меня перебор от корня к верхнему элементу - работает криво


Последний раз редактировалось dacino; 05.01.2007 в 17:37.
Старый 05.12.2006, 00:59
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
По-моему, достаточно вообще одной рекурсии.

Старый 05.12.2006, 01:34
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 3  
Ответить с цитированием
dacino

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
__etc - поясни, как обойтись одной, тут уже красота кода, черт с ней, мне пока что б заработало, писал под две рекурсии вот первая - должна искать верхний "уровень"
Код:
function heard(l_mc:MovieClip):MovieClip{
		var d:Number = l_mc.getNextHighestDepth();
		var el = null, nel = null;
		for(var i = 0; i<d; i++){
			el = l_mc.getInstanceAtDepth(i);
			if(el instanceof MovieClip){
				var ed:Number = el.getNextHighestDepth();
				for(var j = 0; j<ed; j++){
					nel = el.getInstanceAtDepth(j);
					if(nel instanceof MovieClip){
						heard(nel);						
					}					
				}
				return el;//? где это должно быть чтоб результат был правильный
			}
		}
	}
в чужом коде всегда разбираться западло, расказываю как могу:
есть главный мув на нем еще два - один(на нем создаются мувы с TextField), - второй(на нем будут мувы для рисования знаков дроби, корня и т.д.), вот на если у нас рисуется дробь, то на первом муве создается пустой мув, на нем еще два с текстовыми полями, если в поле находится курсор и добавить еще одну дробь - на предке этого поля создастса еще один мув с двумя другими+TextField, и т.д.
степень вложенности зависит от извращенности пользователя, дак вот надо найти самый верхний, для чего служит функция heard, но она рекурсивная из нее формируется стек, т.е последний блок выполняется первым, и результатом является мув возрашенный первым блоком(последним выполненым), а мне требо, чтоб последним(который выполняется первым).
- надеюсь не доконца всех запутал, проще в исходнике посмотреть структуру клипов.

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

Регистрация: Sep 2002
Сообщений: 30,787
А зачем второй вложенный цикл?

Рекурсия у тебя одна — собственно, вызов heard.

Старый 05.12.2006, 01:59
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 5  
Ответить с цитированием
dacino

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
1 - ну выше я пытался описать зачем, у меня два типа мувов, одни для создания сложных элементов а на других расположены эти элементы, вот мне нужны последние
2-это я только нахожу верхний мув, а надо еще от него дойти еще обратно до корня(с верху вниз без проблем, с подъемом сложности)

...,не функция находит ерунду, совсем не то что требоо, а как объяснить что она должна искать не представляю,
покамест господа флешеры забейте, автор забыл что он должен искать...


Последний раз редактировалось dacino; 05.12.2006 в 02:26.
Старый 05.12.2006, 19:43
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 6  
Ответить с цитированием
dacino

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
искать надо мув расположенный на самом верхнем уровне, как это сделать пробовал так:
Код:
function heard(l_mc:MovieClip):MovieClip{
		var d:Number = l_mc.getNextHighestDepth();
		var el = null;
		for(var i = 0; i<d; i++){
			el = l_mc.getInstanceAtDepth(i); 
			if(el instanceof MovieClip){				
				return heard(el);				
			}
			else{ 
				if(el instanceof TextField and d==1)
					return el._parent;				
			}
		}
	}
- это не работает, возращает первый найденный а не последний мув, как правильно должна выглядеть эта функция?
------


Последний раз редактировалось dacino; 05.12.2006 в 20:30.
Старый 05.12.2006, 19:55
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 7  
Ответить с цитированием
dacino

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
все дело в return прекращающем выполнение функции, а есть ли аналог result'a в AS как иначе результату значению возвращаемому функцией присвоить что-то и продолжить ее выполнение?

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

Регистрация: Sep 2002
Сообщений: 30,787
А куда ты, собственно, элемент возвращаешь?

Старый 05.12.2006, 21:33
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 9  
Ответить с цитированием
dacino

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
ты про if не знаю куда и кому, но если писать просто heard(el); без return то рекурсия вообще не работает

Старый 05.12.2006, 21:45
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 10  
Ответить с цитированием
dacino

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
черт с этим моим кодом, сам запутался и другим разобраться мешаю, задача:
мув, на нем еще несколько мувов, на них мувы еще и т.д. как найти самый верхний мув
и еще кроме мувов там могут быть текстовые поля - каждым листом дерева будет TextField


Последний раз редактировалось dacino; 06.12.2006 в 00:56.
Создать новую тему Ответ Часовой пояс GMT +4, время: 10:43.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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