Если объект DisplayObjectContainer удаляется из списка отображения, а также перемещается или иным способом преобразуется, то каждый экранный объект в DisplayObjectContainer также удаляется, перемещается или преобразуется.
Сам по себе контейнер экранного объекта является типом экранного объекта, и его можно добавить в контейнер экранного объекта. Например, на следующем изображении показан контейнер экранного объекта (
pictureScreen
), который содержит одну контурную фигуру и четыре других контейнера экранных объектов (принадлежащих типу PictureFrame):
Полноразмерное изображение
-
А.
-
Фигура, задающая границу контейнера экранного объекта pictureScreen
-
Б.
-
Четыре контейнера экранных объектов, являющихся дочерними объектами объекта pictureScreen
Чтобы экранный объект появился в списке отображения, его нужно добавить в контейнер экранного объекта, находящийся в списке отображения. Это делается с помощью метода
addChild()
или метода
addChildAt()
объекта контейнера. Например, объект
myTextField
не удастся вывести на экран без последней строки следующего кода:
var myTextField:TextField = new TextField();
myTextField.text = "hello";
this.root.addChild(myTextField);
В этом примере кода
this.root
указывает на контейнер экранного объекта MovieClip, содержащий код. В вашей собственной версии кода можно указать другой контейнер.
Воспользуйтесь методом
addChildAt()
для добавления дочернего объекта на конкретную позицию в списке дочерних объектов контейнера экранного объекта. Эти позиции указателя, начинающегося с нуля, в списке дочерних объектов, относятся к расположению экранных объектов (от переднего слоя к заднему). Например, рассмотрите следующие три экранных объекта. Каждый объект создавался на основе заказного класса Ball.
Расположение этих экранных объектов по слоям в контейнере можно отрегулировать с помощью метода
addChildAt()
. Например, рассмотрим следующий код:
ball_A = new Ball(0xFFCC00, "a");
ball_A.name = "ball_A";
ball_A.x = 20;
ball_A.y = 20;
container.addChild(ball_A);
ball_B = new Ball(0xFFCC00, "b");
ball_B.name = "ball_B";
ball_B.x = 70;
ball_B.y = 20;
container.addChild(ball_B);
ball_C = new Ball(0xFFCC00, "c");
ball_C.name = "ball_C";
ball_C.x = 40;
ball_C.y = 60;
container.addChildAt(ball_C, 1);
После выполнения этого кода экранные объекты располагаются в объекте
container
DisplayObjectContainer следующим образом. Обратите внимание на слои расположения объектов.
Чтобы переместить объект в верхнюю часть списка отображения, просто снова добавьте его в список. Например, после предыдущего кода, чтобы переместить
ball_A
в верхнюю часть стопки, воспользуйтесь следующей строкой кода:
container.addChild(ball_A);
Этот код удаляет
ball_A
с позиции в списке отображения
container
и снова добавляет его в верхнюю часть списка. В конечном итоге он перемещается в верхнюю часть стопки.
Можно использовать метод
getChildAt()
для проверки порядка слоев, в которых располагаются экранные объекты. Метод
getChildAt()
возвращает дочерние объекты контейнера на основе переданного ему номера указателя. Например, следующий код обнаруживает имена экранных объектов на различных позициях в списке дочерних объектов объекта
container
DisplayObjectContainer:
trace(container.getChildAt(0).name); // ball_A
trace(container.getChildAt(1).name); // ball_C
trace(container.getChildAt(2).name); // ball_B
При удалении экранного объекта из списка дочерних объектов родительского контейнера позиции родительских элементов списка смещаются вниз в указателе дочерних объектов. Например, в продолжение разговора о предыдущем коде, в следующем коде показано, как экранный объект, который находился на позиции 2 в
container
DisplayObjectContainer, перемещается на позицию 1 при удалении экранного объекта, который находится ниже в списке дочерних объектов:
container.removeChild(ball_C);
trace(container.getChildAt(0).name); // ball_A
trace(container.getChildAt(1).name); // ball_B
Методы
removeChild()
и
removeChildAt()
не удаляют экземпляр объекта целиком. Они просто удаляют его из списка дочерних объектов контейнера. При этом данный экземпляр может быть представлен другой переменной. Чтобы полностью удалить объект, воспользуйтесь оператором
delete
.
Поскольку экранный объект имеет только один родительский контейнер, экземпляр экранного объекта можно добавить только в один контейнер экранного объекта. Например, следующий код демонстрирует, что экранный объект
tf1
может существовать только в одном контейнере (в данном случае это Sprite, являющийся расширением класса DisplayObjectContainer):
tf1:TextField = new TextField();
tf2:TextField = new TextField();
tf1.name = "text 1";
tf2.name = "text 2";
container1:Sprite = new Sprite();
container2:Sprite = new Sprite();
container1.addChild(tf1);
container1.addChild(tf2);
container2.addChild(tf1);
trace(container1.numChildren); // 1
trace(container1.getChildAt(0).name); // text 2
trace(container2.numChildren); // 1
trace(container2.getChildAt(0).name); // text 1
Если вы добавляете экранный объект, который содержится в одном контейнере экранных объектов, в другой контейнер экранных объектов, он удаляется из списка дочерних объектов первого контейнера экранных объектов.
Помимо описанных выше методов класс DisplayObjectContainer определяет ряд методов для работы с дочерними экранными объектами, включая указанные ниже.
-
contains()
: определяет, является ли объект дочерним объектом DisplayObjectContainer.
-
getChildByName()
: извлекает экранный объект по имени.
-
getChildIndex()
: возвращает позицию индекса для экранного объекта.
-
setChildIndex()
: изменяет позицию дочернего экранного объекта.
-
removeChildren()
: удаляет несколько дочерних объектов отображения.
-
swapChildren()
: меняет местами два экранных объекта, ставя один из них перед другим или позади него.
-
swapChildrenAt()
: меняет местами два экранных объекта, ставя один из них перед другим или позади него в зависимости от их значений в указателе.
Дополнительные сведения см. в соответствующих разделах
cправочника ActionScript® 3.0 для платформы Adobe® Flash® Platform
.
Вспомните, что экранный объект, который отсутствует в списке отображения (то есть не включенный в контейнер экранного объекта, являющийся дочерним объектом рабочей сцены), известен как экранный объект,
не входящий в список
.