![]() |
|
||||||||||
|
|||||
|
[+1.3 15.11.06]
[+1 12.01.07] |
есть дерево с неизвестным уровнем вложенности(знаем его корень), подскажите оптимальный алгоритм для решения такой задачи -
1 - нужно элемент расположеныый на самом верхнем уровне 2 - от верхнего элемента дойти до корня перебрав все элементы данного дерева возможно ли обойтись без 2-х рекурсий откомпилите исходник(добавив предварительно в либаре баттон) в режиме отладки и немного пожмакав эту самую кнопочку, вы увидете то самое дерево (его корень ...c_mc.inp), которое надо обойти, и не ругайте меня за выделение функций в класс Draw(понимаю, что можно было обойтись и #include) Другие замечания приветствуются у меня перебор от корня к верхнему элементу - работает криво Последний раз редактировалось dacino; 05.01.2007 в 17:37. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
По-моему, достаточно вообще одной рекурсии.
|
|
|||||
|
[+1.3 15.11.06]
[+1 12.01.07] |
__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, но она рекурсивная из нее формируется стек, т.е последний блок выполняется первым, и результатом является мув возрашенный первым блоком(последним выполненым), а мне требо, чтоб последним(который выполняется первым). - надеюсь не доконца всех запутал, проще в исходнике посмотреть структуру клипов. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А зачем второй вложенный цикл?
Рекурсия у тебя одна — собственно, вызов heard. |
|
|||||
|
[+1.3 15.11.06]
[+1 12.01.07] |
1 - ну выше я пытался описать зачем, у меня два типа мувов, одни для создания сложных элементов а на других расположены эти элементы, вот мне нужны последние
2-это я только нахожу верхний мув, а надо еще от него дойти еще обратно до корня(с верху вниз без проблем, с подъемом сложности) ...,не функция находит ерунду, совсем не то что требоо, а как объяснить что она должна искать не представляю, покамест господа флешеры забейте, автор забыл что он должен искать... Последний раз редактировалось dacino; 05.12.2006 в 02:26. |
|
|||||
|
[+1.3 15.11.06]
[+1 12.01.07] |
искать надо мув расположенный на самом верхнем уровне, как это сделать пробовал так:
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. |
|
|||||
|
[+1.3 15.11.06]
[+1 12.01.07] |
все дело в return прекращающем выполнение функции, а есть ли аналог result'a в AS как иначе результату значению возвращаемому функцией присвоить что-то и продолжить ее выполнение?
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А куда ты, собственно, элемент возвращаешь?
|
|
|||||
|
[+1.3 15.11.06]
[+1 12.01.07] |
ты про if не знаю куда и кому, но если писать просто heard(el); без return то рекурсия вообще не работает
|
|
|||||
|
[+1.3 15.11.06]
[+1 12.01.07] |
черт с этим моим кодом, сам запутался и другим разобраться мешаю, задача:
мув, на нем еще несколько мувов, на них мувы еще и т.д. как найти самый верхний мув и еще кроме мувов там могут быть текстовые поля - каждым листом дерева будет TextField Последний раз редактировалось dacino; 06.12.2006 в 00:56. |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|