Управление списком отображения в приложениях ActionScript 3

У кого-нибудь есть предложения по хорошему способу управления списком отображения в проекте actionscript 3? Сейчас я создаю приложение и отслеживаю все модули, которые нужно отобразить, и переупорядочивание их стало громоздким. Я загрузил swfs и созданные экземпляры классов, которые также загружаются в swfs, изображения и видео. Должен ли я просто ссылаться на сцену? Как я должен отслеживать дерево отображения? Как я могу всегда заставить один конкретный модуль на вершину дерева?

3 ответа

Я использую контейнер DisplayObjects и позволяю каждому DisplayObject управлять своими непосредственными потомками (родители говорят детям, что делать). Обычно вы можете разбить свой список отображения на естественные "слои", которые могут быть в собственных контейнерах.

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

Также, чтобы заставить DisplayObject отображаться в верхней части списка отображения, просто используйте addChild (даже если он уже добавлен). Это добавит его в начало списка.

Если приложение большое, я бы добавил Child / removeChild, когда пользователь взаимодействует с приложением.

Однако, если он достаточно мал, просто видимый true/false делает это хорошо.

Похоже, вы в первом случае.

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

Что касается замены глубины, я предполагаю, что вы говорите о визуальной глубине, реализуйте это:)

setChildIndex(example,0); // send to back

setChildIndex(example,numChildren - 1); // bring to front

Обмен между:

var otherindex = getChildIndex(theotherthing);

За этой вещью:

setChildIndex(example, otherindex) //pushes the other thing forward

Спереди:

setChildIndex(example, otherindex + 1);

НТН.

Использование контейнеров, как уже упоминалось, является лучшим способом. Контейнеры твой друг.

Использование addChild() для принудительного вывода чего-либо в верхнюю часть списка работает, но может быть утомительным, если вам придется делать это 50000 раз по всему коду, и даже больше, когда вы получаете несколько вещей, которые должны оставаться на вершине, независимо от того, какие.

Так что я делаю, я создаю массив "приоритетного стека глубины" в своем классе документов, к которому я добавляю все, что хочу, "сверху" все время, несмотря ни на что, и в любое время я выполняю любую грубую сценическую работу, такую ​​как отключение Основной экранный объект, я просто использую метод RunDepthStack, который циклически перебирает массив и заново добавляет все в массив.

Вы даже можете получить чрезвычайно мета об этом и добавить объекты в массив, которые даже не обязательно находятся на сцене, вызвав

object.parent.addChild(object);

который позволит вам управлять приоритетными объектами отображения независимо от их контейнера с помощью одного супер-метода...

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

Другие вопросы по тегам