Arbeta med behållare för visningsobjekt

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Om objektet DisplayObjectContainer tas bort från visningslistan, eller om det flyttas eller omformas på annat sätt, kommer även alla visningsobjekt i DisplayObjectContainer att tas bort, flyttas eller omformas.

En behållare för visningsobjekt är också en typ av visningsobjekt – det kan läggas till i en annan behållare för visningsobjekt. Följande bild illustrerar behållaren för visningsobjekt pictureScreen som innehåller en konturform och fyra andra behållare för visningsobjekt (av typen PictureFrame):

Visa grafik i full storlek
A.
En form som definierar kantlinjen för behållaren för visningsobjektet pictureScreen

B.
Fyra behållare för visningsobjekt som är underordnade objektet pictureScreen

För att ett visningsobjekt ska kunna vara med i visningslistan måste du lägga till det till en behållare för visningsobjekt som är med i visningslistan. Detta gör du med hjälp av metoden addChild() eller addChildAt() i behållarobjektet. Utan den sista raden i följande kod skulle till exempel objektet myTextField inte visas.

var myTextField:TextField = new TextField(); 
myTextField.text = "hello"; 
this.root.addChild(myTextField);

I detta kodexempel pekar this.root till behållaren för visningsobjekt för MovieClip med motsvarande kod. I den faktiska koden kanske du anger en annan behållare.

Använd metoden addChildAt() för att lägga till det underordnade objektet till en specifik position i visningsobjektbehållarens lista med underordnade objekt. Dessa nollbaserade indexpositioner i listan med underordnade objekt relaterar till vilken ordning i lager (överst till underst) visningsobjekten har. Titta exempelvis på följande tre visningsobjekt. Alla objekten skapades från den egna klassen Ball.

Visningsobjektens ordning i behållaren kan justeras med hjälp av metoden addChildAt() . Titta på följande kod:

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

Vid körning av den här koden placeras visningsobjekten enligt följande i DisplayObjectContainer-objektet container . Observera objektens ordning i lager.

Omplacera ett objekt till överst i visningslistan genom att lägga till det igen i listan. Om du till exempel efter föregående kod vill flytta ball_A till överst i stacken använder du följande kod:

container.addChild(ball_A);

Med den här koden tar du enkelt bort ball_A från positionen i visningslistan container och lägger till det överst i listan, vilket resulterar i att det läggs överst i stacken.

Du kan använda metoden getChildAt() för att kontrollera visningsobjektens ordningsföljd. Metoden getChildAt() returnerar underordnade objekt i en behållare baserat på det indexnummer du skickar. Med följande kod visas exempelvis namnen på visningsobjekten vid olika positioner i listan med underordnade objekt för DisplayObjectContainer-objektet container :

trace(container.getChildAt(0).name); // ball_A 
trace(container.getChildAt(1).name); // ball_C 
trace(container.getChildAt(2).name); // ball_B

Om du tar bort ett visningsobjekt från överordnad behållares lista med underordnade kommer de högre elementen i listan att flyttas ner en position i det underordnade indexet. Som fortsättning på föregående kod visar koden nedan hur visningsobjektet från position 2 i container flyttas till position 1 när ett visningsobjekt som är lägre i listan med underordnade tas bort:

container.removeChild(ball_C); 
trace(container.getChildAt(0).name); // ball_A 
trace(container.getChildAt(1).name); // ball_B

Metoderna removeChild() och removeChildAt() tar inte bort själva visningsobjektsinstansen. Den tas endast bort från listan med underordnade objekt för behållaren. Instansen kan fortfarande refereras av en annan variabel. (Använd operatorn delete för att helt ta bort ett objekt.)

Eftersom ett visningsobjekt endast har en överordnad behållare kan du lägga till en instans av ett visningsobjekt till endast en behållare för visningsobjekt. I följande kod ser du att visningsobjektet tf1 kan finnas i endast en behållare (i detta fallet Sprite, som omfattar klassen 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

Om du lägger till ett visningsobjekt som ingår i en visningsobjektbehållare till en annan behållare så tas den bort från den första behållarens lista med underordnade objekt.

Utöver ovan beskrivna metoder finns ytterligare metoder i klassen DisplayObjectContainer som du använder när du arbetar med underordnade visningsobjekt:

  • contains() : Avgör om ett visningsobjekt är underordnat i DisplayObjectContainer.

  • getChildByName() : Hämtar ett visningsobjekt per namn.

  • getChildIndex() : Returnerar indexpositionen för ett visningsobjekt.

  • setChildIndex() : Ändrar positionen för ett underordnat visningsobjekt.

  • removeChildren() : Tar bort flera underordnade visningsobjekt.

  • swapChildren() : Ändrar ordningen (överst till underst) för två visningsobjekt.

  • swapChildrenAt() : Ändrar ordningen (överst till underst) för två visningsobjekt som anges via indexvärden.

Du hittar mer information i respektive avsnitt av Referenshandbok för ActionScript 3.0 i Adobe Flash-plattformen .

Kom ihåg att ett visningsobjekt utanför visningslistan inte ingår i en behållare för visningsobjekt som är underordnad scenen.