|
Все компоненты 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, один перед другим, а также по одному прослушивателю событий для каждого из них. При щелчке по каждой кнопке обработчик события удаляет ее из списка отображения и с рабочей области.
-
Создайте новый файл Flash (ActionScript 3.0).
-
Перетащите компонент Button с панели «Компоненты» на панель «Библиотека».
-
Откройте панель «Действия», выберите «Кадр 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
.
|
|
|