Главная » ActionScript » Работа со списком отображения

0

Все компоненты ActionScript 3.0 являются наследниками класса DisplayObject и поэтому имеют доступ к его методам и свойствам для взаимодействия со списком отображения. Список отображения представляет собой иерархию отображаемых объектов и графических элементов в приложении. Эта иерархия включает следующие элементы:

•   рабочая область, которая является контейнером объектов верхнего уровня;

•   экранные объекты, включая фигуры, фрагменты роликов и текстовые поля и др.;

•   контейнеры экранных объектов (это особый тип экранных объектов, которые могут содержать дочерние экранные объекты).

Порядок объектов в списке отображения определяет их глубину в родительском контейнере. Глубиной объекта называется его позиция в нисходящем порядке (с переднего к заднему плану рабочей области или контейнера экранного объекта). Порядок глубины можно наглядно проследить, когда объекты пересекаются, но он присутствует, даже если этого не происходит. Каждый объект в списке отображения имеет соответствующую глубину в рабочей области. Чтобы изменить глубину объекта, переместив его вперед или назад по отношению к другим объектам, нужно изменить его позицию в списке отображения. Порядок по умолчанию для объектов в списке отображения соответствует порядку их добавления в рабочую область. Позицию 0 в списке отображения занимает объект, находящийся в начале последовательности глубины.

Добавление компонента в список отображения

Объект можно добавить в объект DisplayObjectContainer, вызвав метод addChild() или addChildAt() для контейнера. Если контейнером является рабочая область, добавить объект в список отображения можно в ходе разработки: для этого его нужно создать или, если это компонент, перетащить в рабочую область с панели "Компоненты". Чтобы добавить объект в контейнер с помощью ActionScript, сначала создайте его экземпляр, вызвав конструктор с операторомnew, а после этого вызовите метод addChild() или addChildAt(), чтобы поместить его в рабочую область и в список отображения. Метод addChild() помещает объект в следующую позицию списка отображения, а addChildAt() задает позицию, в которую требуется добавить объект. Если указать позицию, которая уже занята другим объектом, этот объект и все находящиеся над ним перемещаются на одну позицию вверх. Свойство numChildren объекта DisplayObjectContainer содержит число экранных объектов, содержащихся в контейнере. Чтобы извлечь объект из списка отображения, вызовите метод getChildAt() и укажите позицию, а если известно имя объекта, вызовите метод getChildByName().

Примечание. Добавляя компонент с помощью ActionScript, необходимо задать ему имя с помощью свойства name, чтобы его можно было найти по имени в списке отображения.

В следующем примере отображаются имена и позиции трех компонентов в списке отображения. Сначала перетащите компоненты NumericStepper, Button и ComboBox в рабочую область так, чтобы они пересекались друг с другом и присвойте их экземплярам имена aNs, aButton и aCb. Затем добавьте следующий код на панель "Действия" в кадре 1 временной шкалы:

var i:int = 0;

while(i < numChildren) {

trace(getChildAt(i).name + " is at position: " + i++);

}

На панели вывода должны появится следующие строки.

aNs is at position: 0 aButton is at position: 1 aCb is at position: 2

Перемещение компонента в списке отображения

Можно изменить позицию объекта в списке отображения и его глубину отображения с помощью метода addChildAt(), указав в качестве параметров имя объекта и позицию, в которую его требуется добавить. Например, добавьте следующий код к предыдущему примеру, чтобы первым отображался компонент NumericStepper и повторите цикл, чтобы показать новые позиции компонентов в списке отображения.

this.addChildAt(aNs, numChildren – 1);

i = 0;

while(i < numChildren) {

trace(getChildAt(i).name + " is at position: " + i++);

}

На панели вывода должны появится следующие строки.

aNs is at position: 0 aButton is at position: 1 aCb is at position: 2 aButton is at position: 0 aCb is at position: 1

aNs is at position: 2

Кроме того, экземпляр NumericStepper должен появится перед остальными компонентами на экране. Обратите внимание, что свойство numChildren представляет количество объектов (от 1 до n) в списке

отображения, а порядковые номера объектов отсчитываются от 0. Поэтому если в списке отображения

содержится три объекта, то третий объект будет занимать в индексе позицию 2. Это означает, что позиция

последнего объекта в списке отображения, или верхнего объекта с точки зрения глубины, вычисляется как

numChildren — 1.

Удаление компонента из списка отображения

Удалить компонент их контейнера экранных объектов и его списка отображения можно с помощью методов removeChild() и removeChildAt(). В следующем примере в рабочую область добавляется три экземпляра Button, один перед другим, а также по одному прослушивателю событий для каждого из них. При щелчке по каждой кнопке обработчик события удаляет ее из списка отображения и с рабочей области.

1   Создайте новый файл Flash (ActionScript 3.0).

2   Перетащите компонент Button с панели "Компоненты" на панель "Библиотека".

3   Откройте панель "Действия", выберите "Кадр 1" на главной временной шкале и введите следующий код.

import fl.controls.Button;

var i:int = 0;

while(i++ < 3) {

makeButton(i);

}

function removeButton(event:MouseEvent):void {

removeChildAt(numChildren -1);

}

function makeButton(num) {

var aButton:Button = new Button(); aButton.name = "Button" + num; aButton.label = aButton.name; aButton.move(200, 200); addChild(aButton);

aButton.addEventListener(MouseEvent.CLICK, removeButton);

}

Полное описание списка отображения см. в разделе "Программирование отображаемого содержимого" руководства Программирование на ActionScript 3.0.

Источник: Использование компонентов ActionScript 3.0 – 2008

По теме:

  • Комментарии