Arbeiten mit der Anzeigeliste

Alle ActionScript 3.0-Komponenten erben von der DisplayObject-Klasse und haben daher Zugang zu den Methoden und Eigenschaften dieser Klasse, die zur Interaktion mit der Anzeigeliste dienen. Die Anzeigeliste repräsentiert die Hierarchie der angezeigten Objekte und visuellen Elemente in einer Anwendung. Diese Hierarchie umfasst die folgenden Elemente:

  • Die Bühne, die den Container auf oberster Ebene darstellt

  • Anzeigeobjekte, also u. a. Formen, Movieclips und Textfelder

  • Anzeigeobjektcontainer, also besondere Anzeigeobjekte, die untergeordnete Anzeigeobjekte enthalten können

Die Reihenfolge der Objekte in der Anzeigeliste bestimmt deren Tiefe innerhalb des übergeordneten Containers. Die Tiefe eines Objekts bezieht sich auf seine Position von oben nach unten bzw. von vorne nach hinten auf der Bühne oder seinem Anzeigecontainer. Die Tiefenreihenfolge ist offensichtlich, wenn sich die Objekte überschneiden, sie existiert aber auch, wenn dies nicht der Fall ist. Jedes Objekt in der Anzeigeliste hat eine entsprechende Tiefe auf der Bühne. Wenn Sie die Tiefe eines Objekts ändern möchten, indem Sie es vor oder hinter andere Objekte verschieben, müssen Sie die Position des Objekts in der Anzeigeliste ändern. Die Standardreihenfolge von Objekten in der Anzeigeliste ist die Reihenfolge, in der sie auf der Bühne platziert wurden. Position 0 in der Anzeigeliste ist das Objekt ganz unten in der Tiefenreihenfolge.

Einfügen von Komponenten in die Anzeigeliste

Sie können in ein DisplayObjectContainer-Objekt ein Objekt einfügen, indem Sie die Methode addChild() oder addChildAt() des Containers aufrufen. Im Fall der Bühne können Sie ein Objekt auch beim Authoring in die Anzeigeliste einfügen, indem Sie es erstellen, oder, wenn es sich um Komponenten handelt, indem Sie es aus dem Bedienfeld „Komponenten“ auf die Bühne ziehen. Um ein Objekt mit ActionScript in einen Container einzufügen, erstellen Sie zunächst eine Instanz, indem Sie mit dem Operator new seinen Konstruktor aufrufen und dann die Methode addChild() oder addChildAt() aufrufen, um es auf der Bühne und somit in der Anzeigeliste zu platzieren. Die Methode addChild() platziert das Objekt auf der nächsten Position in der Anzeigeliste, während Sie mit addChildAt() die Position angeben können, auf der das Objekt platziert werden soll. Wenn Sie eine Position angeben, die bereits besetzt ist, werden das Objekt auf dieser Position und alle darüber liegenden Objekte um eine Position nach oben gerückt. Die Eigenschaft numChildren eines DisplayObjectContainer-Objekts bezeichnet die Anzahl der enthaltenen Objekte. Sie können ein Objekt aus der Anzeigeliste abrufen, indem Sie die Methode getChildAt() aufrufen und die Position des Objekts angeben oder, wenn Sie seinen Namen kennen, indem Sie getChildByName() aufrufen.

Hinweis: Wenn Sie eine Komponente mithilfe von ActionScript-Code einfügen, müssen Sie seiner name-Eigenschaft einen Wert zuweisen, um sie später per Name aus der Anzeigeliste abrufen zu können.

Mit dem folgenden Beispiel werden die Namen und Positionen von drei Komponenten in der Anzeigeliste ausgegeben. Ziehen Sie zuerst eine NumericStepper-, eine Button- und eine ComboBox-Instanz so auf die Bühne, dass sie sich überschneiden, und weisen Sie ihnen die Instanznamen aNs , aButton und aCb zu. Fügen Sie dem Bedienfeld „Aktionen“ von Bild 1 in der Zeitleiste den folgenden Code hinzu.

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

Im Bedienfeld „Ausgabe“ werden die folgenden Zeilen angezeigt:

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

Verschieben von Komponenten innerhalb der Anzeigeliste

Sie können die Position eines Objekts innerhalb der Anzeigeliste, und somit seine Anzeigetiefe, ändern, indem Sie die Methode addChildAt() aufrufen und als Methodenparameter den Namen des Objekts und die Position, auf der es platziert werden soll, angeben. Fügen Sie dem vorstehenden Beispiel den folgenden Code hinzu, um das NumericStepper-Objekt nach ganz oben zu verschieben, und wiederholen Sie die Schleife, um die neuen Positionen der Komponenten in der Anzeigeleiste anzuzeigen:

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

Im Bedienfeld „Ausgabe“ sollten Sie Folgendes sehen:

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

Die NumericStepper-Komponente sollte auch vor den anderen Komponenten auf dem Bildschirm angezeigt werden.

Beachten Sie, dass die Eigenschaft numChildren die Nummer (oder Tiefenreihenfolge) eines Objekts innerhalb der Anzeigeliste bezeichnet (von 1 bis n ), während die erste Position bei 0 liegt. Wenn sich in der Liste also drei Objekte befinden, lautet die Indexposition des dritten Objekts 2. Das bedeutet, dass Sie mit numChildren - 1 auf die letzte Position in der Anzeigeliste, d. h., auf das oberste Objekt, verweisen können.

Entfernen von Komponenten aus der Anzeigeliste

Sie können eine Komponente mit den Methoden removeChild() und removeChildAt() aus einem Anzeigeobjektcontainer und seiner Anzeigeliste entfernen. Im folgenden Beispiel werden drei Button-Komponenten übereinander auf der Bühne abgelegt, und für jede Komponente wird ein Ereignis-Listener hinzugefügt. Wenn der Benutzer auf die einzelnen Schaltflächen klickt, werden sie von der Ereignisprozedur aus der Anzeigeliste und von der Bühne entfernt.

  1. Erstellen Sie eine neue Flash-Datei (ActionScript 3.0).

  2. Ziehen Sie eine Button-Komponente aus dem Bedienfeld „Komponenten“ in das Bedienfeld „Bibliothek“.

  3. Öffnen Sie das Bedienfeld „Aktionen“, wählen Sie in der Hauptzeitleiste Bild 1 aus und fügen Sie den folgenden Code ein:

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

    Eine vollständige Erläuterung der Anzeigeliste finden Sie im Abschnitt „Programmierung von Anzeigeobjekten“ im Handbuch Programmieren mit ActionScript 3.0 .

Rechtliche Hinweise | Online-Datenschutzrichtlinie