Przechodzenie przez listę wyświetlania

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Lista wyświetlania ma strukturę drzewa. U góry drzewa znajduje się obiekt Stage, który może zawierać wiele obiektów wyświetlanych. Te obiekty wyświetlane, które stanowią również kontenery obiektów wyświetlanych, mogą zawierać inne obiekty wyświetlane lub inne kontenery tych obiektów.

Klasa DisplayObjectContainer zawiera właściwości i metody przeznaczone do przechodzenia przez listę wyświetlania za pośrednictwem list podrzędnych kontenerów obiektów wyświetlanych. Przykład: rozważmy poniższy kod, który dodaje dwa obiekty wyświetlane ( title i pict ) do obiektu container (jest to obiekt Sprite, a klasa Sprite stanowi rozszerzenie klasy DisplayObjectContainer):

var container:Sprite = new Sprite(); 
var title:TextField = new TextField(); 
title.text = "Hello"; 
var pict:Loader = new Loader(); 
var url:URLRequest = new URLRequest("banana.jpg"); 
pict.load(url); 
pict.name = "banana loader"; 
container.addChild(title); 
container.addChild(pict);

Metoda getChildAt() zwraca obiekt podrzędny listy wyświetlania w określonej pozycji indeksu:

trace(container.getChildAt(0) is TextField); // true

Dostęp do obiektów podrzędnych można również uzyskiwać za pomocą nazw. Każdy obiekt wyświetlany zawiera właściwość property i jeśli nie zostanie ona przypisana, wówczas program Flash Player lub AIR przypisuje wartość domyślną, taką jak "instance1" . Na przykład: poniższy kod przedstawia sposób użycia metody getChildByName() w celu uzyskania dostępu do podrzędnego obiektu wyświetlanego o nazwie "banana loader" :

trace(container.getChildByName("banana loader") is Loader); // true

Użycie metody getChildByName() może spowodować większe zmniejszenie wydajności niż użycie metody getChildAt() .

Kontener obiektów wyświetlanych może zawierać inne kontenery takich obiektów jako obiekty podrzędne na liście wyświetlania, dlatego możliwe jest przechodzenie całej listy wyświetlania aplikacji jako drzewa. Na przykład: we fragmencie kodu przedstawionym wcześniej — po zakończeniu operacji ładowania dla obiektu pict Loader obiekt pict będzie zawierał jeden podrzędny obiekt wyświetlania, który będzie załadowaną bitmapą. Aby uzyskać dostęp do obiektu wyświetlanego bitmapa, można napisać metodę pict.getChildAt(0) . Można również napisać container.getChildAt(0).getChildAt(0) (ponieważ container.getChildAt(0) == pict ).

Uruchomienie poniższej funkcji udostępnia wynik (z wcięciami) wykonania metody trace() dla listy wyświetlania z kontenera obiektów wyświetlanych:

function traceDisplayList(container:DisplayObjectContainer,                                                indentString:String = ""):void 
{ 
    var child:DisplayObject; 
    for (var i:uint=0; i < container.numChildren; i++) 
    { 
        child = container.getChildAt(i); 
        trace(indentString, child, child.name);  
        if (container.getChildAt(i) is DisplayObjectContainer) 
        { 
            traceDisplayList(DisplayObjectContainer(child), indentString + "    ") 
        } 
    } 
}

Adobe Flex

Jeśli używany jest program Flex, należy pamiętać o tym, że Flex definiuje wiele klas obiektów wyświetlanych składników, a te klasy zastępują metody dostępu do listy wyświetlania klasy DisplayObjectContainer. Na przykład: klasa Container pakietu mx.core zastępuje metodę addChild() oraz inne metody klasy DisplayObjectContainer (której rozszerzeniem jest klasa Container). W przypadku metody addChild() klasa zastępuje ją w taki sposób, że do instancji Container we Flex nie można dodać wszystkich typów obiektów wyświetlanych. W tym przypadku zastąpiona metoda wymaga, aby dodawany obiekt podrzędny był typu mx.core.UIComponent.