2009-11-04 3 views
1

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

ответ

1

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

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

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

+1

Это похоже на хороший старт, спасибо ;-) – martin

0

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

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

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

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

object.parent.addChild(object); 

, который позволит вам управлять приоритезированных DisplayObjects независимо от их емкости с один супер метод ...

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

+0

Мне нравится эта идея, у вас есть пример того, как вы ее реализовали? спасибо ;-) – martin

+0

учиться делать! Никто меня не научил, гангста. –

+0

Мне действительно не нравится идея детей, рассказывающих родителям, что делать! –

0

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

Если, однако, он довольно мал, прост хорошо видно, что истина/ложь это хорошо.

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

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

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

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); 

HTH.

Смежные вопросы