Управление списком отображения в приложениях 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);
который позволит вам управлять приоритетными объектами отображения независимо от их контейнера с помощью одного супер-метода...
Теперь, если у вас чрезвычайно сложный пользовательский интерфейс, вам нужно будет получить более детальную информацию, но я не подозреваю, что это ваша проблема прямо сейчас.