![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1 06.03.13]
Регистрация: Feb 2007
Сообщений: 174
|
Спасибо мысль понятна, но в моём случае наверно это не пройдёт потому как особенно элементы третьего уровня могут менять свои индексы, вообще удаляться, добавляться новые. Это может вызвать такую чехарду, лучше уж перебором выходить на него, кликнутого и давать ему команды.
|
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
На самом деле, перебор - это не так страшно.
|
|
|||||
|
Регистрация: Feb 2009
Сообщений: 141
|
Такие сложные массивы - плохо.
[0][3][2] - плохо. Как было сказано выше, лучше пересмотреть структуру данных и сделать для первого уровня массива [0] специальный тип, который описывает вложенные уровни [3][2]. И тогда у вас будет одномерный массив или вектор этих специальных типов. (Специальный тип может также описывать массив, который хранит специальный тип для следующего вложенного уровня и т.д.) И принципы ООП соблюдены, и ежу понятен код будет, а при виде [0][3][2] я начинаю жутко нервничать ![]() |
|
|||||
|
Регистрация: Feb 2013
Сообщений: 176
|
может деревья тут были бы выгоднее?
|
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Кстати, я так и не понял, а зачем вообще эти массивы.
Цитата:
Если же мы ткнули в конкретный элемент, то он всегда знает своего родителя и родителя своего родителя. |
|
|||||
|
[+1 06.03.13]
Регистрация: Feb 2007
Сообщений: 174
|
Мысль хорошая, но я признаться мало работал именно с контейнерами, будем гуглить.
|
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Цитата:
var panelContainer:Sprite = new Sprite(); // это контейнер var element1:Element = new Element(); // это элемент var element2:Element = new Element(); var element3:Element = new Element(); panelContainer.addChild(element1); panelContainer.addChild(element2); panelContainer.addChild(element3); for(var i:int = 0; i < panelContainer.numChildren; i++) { if (panelContainer.getChildAt(i) as Element) { var element:Element = panelContainer.getChildAt(i) as Element; // тут делаем с элементом, что нужно trace(element, element.parent, element.parent.parent); } } |
|
|||||
|
[+1 06.03.13]
Регистрация: Feb 2007
Сообщений: 174
|
Спасибо, ситуация проясняется.
Добавлено через 22 часа 26 минут Второй день бьюсь и понимаю что мало что проясняется, проблема не в понимании сути, а в незнании синтаксиса AS3. С одномерным контейнером все понятно, положил-выложил, делов-то! Требуется чёткое понимание принципа создания контейнеров разного уровня ну и управления ими: создал, добавил, удалил. Вот примерно что требуется от предыдущего кода: var panelContainer:Sprite = new Sprite(); // это контейнер var element1:Sprite = new Sprite(); // это элемент var element2:Sprite = new Sprite(); var element3:Sprite = new Sprite(); panelContainer.addChild(element1); panelContainer.addChild(element2); panelContainer.addChild(element3); /* В контейнер panelContainer добавлено три потомка element1,2,3 теперь стоит задача добавить в эти потомки ещё объекты а потом в свою очередь добавить потомки в них */ /* Следующие элементы добавляются как дети в добавленные в panelContainer element1,2,3 */ var element1a:Sprite = new Sprite(); var element2a:Sprite = new Sprite(); var element3a:Sprite = new Sprite(); /* После всего этого добавить еще потомков по пути panelContainer->element1->element1a->element1a1 */ var element1a1:Sprite = new Sprite(); var element2a1:Sprite = new Sprite(); var element3a1:Sprite = new Sprite(); /* А так же хотелось бы понять как можно легко и непринуждённо управлять ими. */ for(var i:int = 0; i < panelContainer.numChildren; i++) { if (panelContainer.childAt(i) as Sprite) { var element:Sprite = panelContainer.getChildAt(i) as Sprite; // тут делаем с элементом, что нужно trace(element.name, element.parent, element.parent.parent, element.parent.parent.perent); } } |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:34. |
|
|
« Предыдущая тема | Следующая тема » |
|
|