Praca z listą wyświetlania

Wszystkie składniki w języku ActionScript 3.0 dziedziczą z klasy DisplayObject, a tym samym mają dostęp do metod i właściwości tej klasy umożliwiających interakcje z listą wyświetlania. Lista wyświetlania to hierarchia obiektów wyświetlanych i elementów wizualnych w aplikacji. Hierarchia ta obejmuje następujące elementy:

  • stół montażowy, który jest kontenerem najwyższego poziomu;

  • obiekty wyświetlane, do których należą między innymi kształty, klipy filmowe i pola tekstowe;

  • kontenery obiektów wyświetlanych, będące szczególnymi typami obiektów wyświetlanych, które mogą zawierać podrzędne obiekty wyświetlane.

Kolejność obiektów na liście wyświetlania decyduje o ich głębokości w kontenerze nadrzędnym. Głębokość obiektu to jego pozycja liczona od najwyższej do najniższej warstwy stołu montażowego, od pierwszego planu w głąb stołu montażowego lub pozycja w ramach kontenera obiektu wyświetlanego. Różnice w głębokościach obiektów są widoczne, gdy obiekty się nakładają, ale istnieją nawet wtedy, gdy obiekty nie nakładają się. Każdy obiekt na liście wyświetlania ma określoną głębokość na stole montażowym. Aby zmienić głębokość obiektu, umieszczając go przed lub za określonymi innymi obiektami, należy zmienić jego pozycję na liście wyświetlania. Domyślna kolejność obiektów na liście wyświetlania jest identyczna z kolejnością, w jakiej były one umieszczane na stole montażowym. Pozycję 0 ma na liście wyświetlania ten obiekt, który znajduje się najgłębiej.

Dodawanie składnika do listy wyświetlania

Możliwe jest dodawanie obiektów do obiektu DisplayObjectContainer poprzez wywołanie metody addChild() lub addChildAt() kontenera. W przypadku stołu montażowego możliwe jest także dodawanie obiektów do jego listy wyświetlania podczas tworzenia treści. Wystarczy utworzyć obiekt na stole montażowym lub przeciągnąć składnik z panelu Składniki na stół montażowy. Aby dodać obiekt do kontenera przy użyciu kodu w języku ActionScript, należy najpierw utworzyć instancję obiektu, wywołując jego konstruktor za pomocą operatora new , a następnie wywołać metodę addChild() lub addChildAt() w celu umieszczenia instancji na stole montażowym i na liście wyświetlania. Metoda addChild() umieszcza obiekt w następnej pozycji na liście wyświetlania, natomiast metoda addChildAt() umożliwia określenie pozycji, w której obiekt ma zostać dodany. W wypadku określenia pozycji, która jest już zajęta, obiekt o tej pozycji i obiekty powyżej niego są przenoszone w górę o 1 pozycję. Właściwość numChildren obiektu DisplayObjectContainer zawiera liczbę obiektów wyświetlanych zawartych w kontenerze. Można pobrać obiekt z listy wyświetlania, wywołując metodę getChildAt() i określając pozycję, lub — jeśli znana jest nazwa obiektu — wywołując metodę getChildByName() .

Uwaga: Dodając składnik przy użyciu kodu ActionScript, należy przypisać nazwę jego właściwości name, jeśli ma być możliwe odwoływanie się do składnika na liście wyświetlania za pośrednictwem jego nazwy.

Poniższy przykładowy kod powoduje wyświetlenie nazw i pozycji trzech składników na liście wyświetlania. Najpierw należy przeciągnąć składniki NumericStepper, Button i ComboBox na stół montażowy w taki sposób, aby nakładały się, po czym nadać im odpowiednio nazwy instancji aNs , aButton oraz aCb . Następnie należy dodać poniższy kod do panelu Operacje w klatce nr 1 na osi czasu:

var i:int = 0; 
while(i < numChildren) { 
    trace(getChildAt(i).name + " is at position: " + i++); 
}

W panelu Wyjście powinny pojawić się następujące wiersze:

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

Przenoszenie składnika na liście wyświetlania

Położenie składnika na liście wyświetlania, a tym samym głębokość, na jakiej jest wyświetlany, można zmienić, wywołując metodę addChildAt() z parametrami określającymi nazwę obiektu oraz pozycję, na której ma być umieszczony. Na przykład dodanie poniższego kodu do poprzedniego przykładu powoduje umieszczenie składnika NumericStepper na wierzchu i powtórzenie pętli w celu wyświetlenia nowych pozycji składników na liście wyświetlania:

this.addChildAt(aNs, numChildren - 1); 
i = 0; 
while(i < numChildren) { 
    trace(getChildAt(i).name + " is at position: " + i++); 
}

W panelu Wyjście powinny pojawić się następujące informacje:

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

Ponadto składnik NumericStepper powinien pojawić się przed pozostałymi składnikami na ekranie.

Należy zwrócić uwagę, że właściwość numChildren określa liczbę obiektów (od 1 do n ) na liście wyświetlania, natomiast pierwsza pozycja na liście ma indeks 0. Jeśli zatem lista zawiera trzy obiekty, trzeci obiekt ma indeks 2. Oznacza to, że do ostatniej pozycji na liście wyświetlania lub do najwyżej położonego obiektu na ekranie można odwołać się, korzystając z indeksu numChildren - 1 .

Usuwanie składnika z listy wyświetlania

W celu usunięcia składnika z kontenera obiektów wyświetlanych i jego listy wyświetlania można użyć metody removeChild() lub removeChildAt() . Poniższy przykładowy kod powoduje umieszczenie trzech składników Button, tak aby pokrywały się na stole montażowym, i dodanie detektora zdarzeń dla każdego z nich. Kliknięcie każdego z przycisków sprawia, że podprogram obsługi zdarzeń usuwa odpowiedni składnik Button z listy wyświetlania i ze stołu montażowego.

  1. Utwórz nowy plik z dokumentem Flash (ActionScript 3.0).

  2. Przeciągnij przycisk z panelu Składniki do panelu Biblioteka.

  3. Otwórz panel Operacje, zaznacz klatkę nr 1 na głównej osi czasu i dodaj następujący kod:

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

    Pełne wyjaśnienie działania listy wyświetlania zawiera sekcja „Programowanie wyświetlania” w podręczniku Programowanie w języku ActionScript 3.0 .