Fördelar med visningslistan

Flash Player 9 och senare, Adobe AIR 1.0 och senare

I ActionScript 3.0 finns det separata klasser för olika typer av visningsobjekt. I ActionScript 1.0 och 2.0 ingår många objekt av samma typ i en och samma klass: klassen MovieClip.

Den här åtskillnaden av klasser och den hierarkiska strukturen för visningslistor har följande fördelar:

  • Effektivare återgivning och minskad minnesanvändning

  • Förbättrad djuphantering

  • Fullständig genomgång av visningslistan

  • Visningsobjekt som inte är med i listan

  • Enklare att skapa underklasser av visningsobjekt

Mer effektiv återgivning och mindre filstorlekar

I ActionScript 1.0 och 2.0 kan du rita former endast i MovieClip-objekt. I ActionScript 3.0 finns det enklare visningsobjektklasser som du kan rita former i. Eftersom dessa visningsobjektklasser i ActionScript 3.0 inte innehåller hela uppsättningen med metoder och egenskaper, som MovieClip-objekten gör, så används mindre minne och processorresurser.

Varje MovieClip-objekt innehåller till exempel egenskaper för tidslinjen för filmklippet, men inte Shape-objektet. Till egenskaperna som hanterar tidslinjen används mycket minnes- och processorresurser. Att använda Shape-objektet i ActionScript 3.0 ger bättre prestanda. Shape-objektet kräver mindre lagring än det mer komplexa MovieClip-objektet. Flash Player och AIR behöver inte hantera outnyttjade MovieClip-egenskaper, vilket ökar hastigheten och minskar minnesutrymmet som krävs för objektet.

Förbättrad djuphantering

I ActionScript 1.0 och 2.0 hanterades djupet via ett linjärt djuphanteringsschema och metoder som till exempel getNextHighestDepth() .

I ActionScript 3.0 ingår klassen DisplayObjectContainer som har mer praktiska metoder och egenskaper för djuphantering av visningsobjekt.

När du flyttar ett visningsobjekt i ActionScript 3.0 till en ny placering i listan med underordnade objekt för en DisplayObjectContainer-instans kommer övriga objekt i listan att placeras om automatiskt och tilldelas nya indexposter i behållaren för visningsobjekt.

I ActionScript 3.0 är det även möjligt att upptäcka alla underordnade objekt i valfri behållare för visningsobjekt. Varje DisplayObjectContainer-instans har en numChildren -egenskap som visar antalet underordnade objekt i behållaren för visningsobjekt. Och eftersom listan med underordnade objekt för en behållare för visningsobjekt alltid är en indexerad lista kan du granska alla objekt i listan från indexposition 0 till och med den sista indexpositionen ( numChildren - 1 ). Detta var inte möjligt med metoderna och egenskaperna för ett MovieClip-objekt i ActionScript 1.0 och 2.0.

Det är enkelt att gå igenom visningslistan sekventiellt i ActionScript 3.0; det finns inga indexnummer som fattas i listan med underordnade objekt för behållaren för visningsobjekt. Att gå igenom visningslistan och hantera djupet av objekten är mycket enklare än vad som var möjligt i ActionScript 1.0 och 2.0. Ett filmklipp i ActionScript 1.0 och 2.0 kunde innehålla objekt med vissa mellanrum i djupordningen, vilket kunde försvåra genomgången av listan. I ActionScript 3.0 lagras varje lista med underordnade objekt för en behållare för visningsobjekt i cacheminnet som en array, vilket ger en mycket snabb sökning. Upprepad visning av alla underordnade objekt i en behållare för visningsobjekt fungerar också mycket snabbt.

I ActionScript 3.0 ges även åtkomst till underordnade objekt i en behållare för visningsobjekt genom användning av metoden getChildByName() i klassen DisplayObjectContainer.

Fullständig genomgång av visningslistan

I ActionScript 1.0 och 2.0 ges ingen åtkomst till vissa objekt, till exempel vektorformer, som ritades med Flash-utvecklingsverktyget. I ActionScript 3.0 har du åtkomst till alla objekt i visningslistan – både de som har skapats med ActionScript och de som har skapats i Flash-utvecklingsverktyget. Mer information finns i Gå igenom visningslistan .

Visningsobjekt som inte är med i listan

Med ActionScript 3.0 kan du skapa visningsobjekt som inte är synliga i visningslistan. Visningsobjekten är inte med i listan. Ett visningsobjekt läggs till i visningslistan endast om du anropar metoden addChild() eller addChildAt() för en DisplayObjectContainer-instans som redan finns med i visningslistan.

Du kan använda visningsobjekt som inte är med i listan när du ska sammankoppla komplexa visningsobjekt, till exempel dem som har flera behållare för visningsobjekt där flera visningsobjekt ingår. Genom att inte ta med visningsobjekt i listan kan du sammankoppla komplexa objekt utan använda bearbetningstid till att återge dessa visningsobjekt. Du kan sedan, vid behov, lägga till ett visningsobjekt som inte finns med i listan. Du kan även flytta ett underordnat objekt i en behållare för visningsobjekt till och från önskad position i listan.

Enklare att skapa underklasser av visningsobjekt

I ActionScript 1.0 och 2.0 behövde du ofta lägga till nya MovieClip-objekt till en SWF-fil för att skapa grundformer eller för att visa bitmappar. I ActionScript 3.0 innehåller klassen DisplayObjekt många inbyggda underklasser, till exempel Shape och Bitmap. Eftersom klasserna i ActionScript 3.0 är mer specialiserade för specifika typer av objekt är det enklare att skapa grundläggande underklasser i de inbyggda klasserna.

För att till exempel kunna rita en cirkel i ActionScript 2.0 kan du skapa klassen CustomCircle som omfattar klassen MovieClip när ett objekt från den egna klassen instansieras. Den klassen skulle däremot även innehålla ett antal egenskaper och metoder från klassen MovieClip (till exempel totalFrames ) som inte används. I ActionScript 3.0 kan du däremot skapa klassen CustomCircle som omfattar objektet Shape och som inte innehåller orelaterade egenskaper och metoder från klassen MovieClip. I följande kod visas ett exempel med klassen CustomCircle:

import flash.display.*; 
 
public class CustomCircle extends Shape 
{ 
    var xPos:Number; 
    var yPos:Number; 
    var radius:Number; 
    var color:uint; 
    public function CustomCircle(xInput:Number,  
                                        yInput:Number,  
                                        rInput:Number,  
                                        colorInput:uint) 
    { 
        xPos = xInput; 
        yPos = yInput; 
        radius = rInput; 
        color = colorInput; 
        this.graphics.beginFill(color); 
        this.graphics.drawCircle(xPos, yPos, radius); 
    } 
}