Durchlaufen der Anzeigeliste

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Wie Sie bereits gesehen haben, lässt sich die Anzeigeliste als eine Baumstruktur darstellen. Die Bühne, die mehrere Anzeigeobjekte enthalten kann, bildet den Stamm. Diese Anzeigeobjekte, die selbst Anzeigeobjektcontainer sind, können andere Anzeigeobjekte oder Anzeigeobjektcontainer enthalten.

Die DisplayObjectContainer-Klasse enthält Eigenschaften und Methoden zum Durchlaufen der Anzeigeliste mithilfe der Child-Listen der Anzeigeobjektcontainer. Im folgenden Beispielcode werden zwei Anzeigeobjekte, title und pict , zum container -Objekt hinzugefügt (ein Sprite, und die Sprite-Klasse erweitert die DisplayObjectContainer-Klasse):

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

Die getChildAt() -Methode gibt die untergeordneten Elemente der Anzeigeliste an einer bestimmten Indexposition zurück:

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

Sie können auch über den Namen auf die untergeordneten Objekte zugreifen. Jedes Anzeigeobjekt verfügt über eine Namenseigenschaft. Wenn Sie diese Eigenschaft nicht zuweisen, weist Flash Player einen Standardwert wie z. B. „instance1" zu. Im folgenden Beispielcode wird gezeigt, wie mit der getChildByName() -Methode auf ein untergeordnetes Anzeigeobjekt namens „banana loader" zugegriffen wird:

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

Die getChildByName() -Methode führt jedoch eventuell zu einer schlechteren Leistung als die getChildAt() -Methode.

Da ein Anzeigeobjektcontainer andere Anzeigeobjektcontainer als untergeordnete Objekte in seiner Anzeigeliste enthalten kann, können Sie die vollständige Anzeigeliste der Anwendung als eine Baumstruktur durchlaufen. Sobald in dem bereits vorgestellten Codeausschnitt der Ladevorgang für das pict -Loader-Objekt abgeschlossen ist, hat das pict -Objekt ein untergeordnetes Anzeigeobjekt geladen (die Bitmap). Für den Zugriff auf dieses Bitmap-Anzeigeobjekt können Sie pict.getChildAt(0) verwenden. Sie können auch container.getChildAt(0).getChildAt(0) schreiben (da container.getChildAt(0) == pict ).

Die folgende Funktion liefert eine eingerückte trace() -Ausgabe der Anzeigeliste eines Anzeigeobjektcontainers:

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

Wenn Sie Flex verwenden, sollten Sie wissen, dass Flex viele Komponenten-Anzeigeobjektklassen definiert und dass diese Klassen die Zugriffsmethoden für Anzeigelisten der DisplayObjectContainer-Klasse überschreiben. So überschreibt z. B. die Container-Klasse des mx.core-Pakets die addChild() -Methode und andere Methoden der DisplayObjectContainer-Klasse (die die Container-Klasse erweitert). Im Fall der addChild() -Methode überschreibt die Klasse die Methode dergestalt, dass nicht alle Typen von Anzeigeobjekten zu einer Container-Instanz in Flex hinzugefügt werden können. Die überschriebene Methode fordert in diesem Fall, dass das untergeordnete Objekt, das Sie hinzufügen, ein Typ des mx.core.UIComponent-Objekts ist.