Exempel på filmklipp: RuntimeAssetsExplorer

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Funktionen Export för ActionScript kan vara särskilt fördelaktig för bibliotek som kan användas i fler än ett projekt. Om Flash Player eller AIR kör en SWF-fil blir symbolerna som har exporterats till ActionScript tillgängliga för alla SWF-filer i samma säkerhetssandlåda allt eftersom SWF läser in. På det här sättet kan ett enstaka Flash-dokument generera en SWF-fil som har definierats för det enda syftet att innehålla grafiska resurser. Den här tekniken är särskilt användbar i större projekt, där tecknare som arbetar med visuella resurser kan arbeta parallellt med utvecklare som skapar en SWF-wrapperfil som sedan läser in den grafiska resurs-SWF-filen under körning. Du kan använda den här metoden för att underhålla en serie versionsfiler där grafiska resurser inte är beroende av den fortlöpande programutvecklingen.

Programmet RuntimeAssetsExplorer läser in en SWF-fil som är en underklass till RuntimeAsset och du kan söka efter tillgängliga resurser i den SWF-filen. Exemplet visar följande:

  • Läsa in extern SWF-fil med Loader.load()

  • Skapa bibliotekssymbol dynamiskt som exporterats för ActionScript

  • ActionScript-styrning av MovieClip-uppspelning

Innan du börjar måste du kontrollera att alla SWF-filer som ska köras i Flash Player finns i samma säkerhetssandlåda. Mer information finns i Säkerhetssandlådor.

Om du vill ha programfilerna för det här exemplet hämtar du Flash Professional Samples. RuntimeAssetsExplorer-programfiler finns i mappen Samples/RuntimeAssetsExplorer. Programmet består av följande filer:

Fil

Beskrivning

RuntimeAssetsExample.mxml

eller

RuntimeAssetsExample.fla

Användargränssnittet för programmet för Flex (MXML) eller Flash (FLA).

RuntimeAssetsExample.as

Dokumentklass för Flash-programmet (FLA).

GeometricAssets.as

En exempelklass som implementerar gränssnittet RuntimeAsset.

GeometricAssets.fla

En FLA-fil länkad till klassen GeometricAssets (dokumentklassen för FLA-filen) som innehåller symboler som har exporterats för ActionScript.

com/example/programmingas3/runtimeassetexplorer/RuntimeLibrary.as

Ett gränssnitt som definierar obligatoriska metoder som förväntas under körningen av alla resurs-SWF-filer som läses in till utforskarbehållaren.

com/example/programmingas3/runtimeassetexplorer/AnimatingBox.as

Klassen för bibliotekssymbolen i form av en roterande låda.

com/example/programmingas3/runtimeassetexplorer/AnimatingStar.as

Klassen för bibliotekssymbolen i form av en roterande stjärna.

Skapa ett biblioteksgränssnitt för körning

För att utforskaren ska kunna samverka på rätt sätt med ett SWF-bibliotek, måste resursbiblioteken för körning struktureras. Vi gör det genom att skapa ett gränssnitt som liknar en klass så till vida att det är en kopia av metoder som avgränsar en förväntad struktur, men till skillnad från en klass så inkluderar den inget metodinnehåll. Med gränssnittet kan både körningsbiblioteket och utforskaren kommunicera med varandra. Varje SWF med körningsresurser som läses in i webbläsaren implementerar det här gränssnittet. Mer information om gränssnitt och hur de kan användas finns i avsnittet om gränssnitt i Learning ActionScript 3.0.

Gränssnittet RuntimeLibrary är enkelt; vi begär helt enkelt en funktion som kan förse utforskaren med en array av klassökvägar för symbolerna som ska exporteras och vara tillgängliga i körningsbiblioteket. Hittills har gränssnittet endast en metod: getAssets().

package com.example.programmingas3.runtimeassetexplorer 
{ 
    public interface RuntimeLibrary 
    { 
        function getAssets():Array; 
    } 
}

Skapa resursbiblioteks-SWF-fil

Genom att definiera gränssnittet RuntimeLibrary är det möjligt att skapa flera resursbiblioteks-SWF-filer som kan läsas in till en annan SWF-fil. Fyra uppgifter ingår när du skapar ett individuellt SWF-bibliotek med resurser:

  • Skapa en klass för resursbiblioteks-SWF-fil

  • Skapa klasser för individuella resurser i biblioteket

  • Skapa de faktiska grafikresurserna

  • Associera de grafiska elementen med klasser och publicera biblioteks-SWF-filen

Skapa en klass för implementering av gränssnittet RuntimeLibrary.

Sedan skapar vi klassen GeometricAssets som implementerar gränssnittet RuntimeLibrary. Det här blir dokumentklassen för FLA. Koden för den här klassen liknar mycket den för RuntimeLibrary-gränssnittet. Skillnaden mellan dem är att i klassdefinitionen har metoden getAssets() ett metodinnehåll.

package 
{ 
    import flash.display.Sprite; 
    import com.example.programmingas3.runtimeassetexplorer.RuntimeLibrary; 
     
    public class GeometricAssets extends Sprite implements RuntimeLibrary  
    { 
        public function GeometricAssets() { 
             
        } 
        public function getAssets():Array { 
            return [ "com.example.programmingas3.runtimeassetexplorer.AnimatingBox", 
                     "com.example.programmingas3.runtimeassetexplorer.AnimatingStar" ];     
        } 
    } 
}

Om vi ska skapa ännu ett körningsbibliotek, kan vi skapa en ny FLA baserat på en annan klass (t.ex. AnimationAssets) som har en egen getAssets()-implementering.

Skapa klasser för varje MovieClip-resurs

I det här exemplet utökar vi endast klassen MovieClip utan att lägga till någon funktion för de anpassade resurserna. Följande kod för AnimatingStar är jämförbar med koden för AnimatingBox:

package com.example.programmingas3.runtimeassetexplorer 
{ 
    import flash.display.MovieClip; 
     
    public class AnimatingStar extends MovieClip 
    { 
        public function AnimatingStar() { 
        } 
    } 
}

Publicera biblioteket

Vi ansluter nu de MovieClip-baserade resurserna till den nya klassen genom att skapa en ny FLA och ange GeometricAssets i fältet Dokumentklass i egenskapsinspektören. För det här exemplet skapar vi två mycket enkla figurer som använder en tidslinjeinterpolering för att göra en rotering medurs över 360 bildrutor. Både animatingBox- och animatingStar-symbolerna har markerats för Export för ActionScript och i fältet Klass anges respektive klassökväg som specificerats i getAssets()-implementeringen. Standardbasklassen för flash.display.MovieClip återstår eftersom vi vill ha standard-MovieClip-metoderna som underklass.

När inställningarna för export av symbolen är klara, publicerar du FLA-filen. Nu har du skapat ditt första körningsbibliotek. Den här SWF-filen kan läsas in till en annan AVM2 SWF-fil och symbolerna AnimatingBox och AnimatingStar blir tillgängliga för den nya SWF-filen.

Läsa in biblioteket till en annan SWF-fil

Den sista funktionsdelen utgörs av användargränssnittet för resursutforskaren. I det här exemplet är sökvägen till körningsbiblioteket hårdkodad som en variabel med namnet ASSETS_PATH. Alternativt kan du använda klassen FileReference t.ex. för att skapa ett gränssnitt som söker efter en särskild SWF-fil på hårddisken.

När körningsbiblioteket har lästs in, anropar Flash Player metoden runtimeAssetsLoadComplete():

private function runtimeAssetsLoadComplete(event:Event):void 
{ 
    var rl:* = event.target.content; 
    var assetList:Array = rl.getAssets(); 
    populateDropdown(assetList); 
    stage.frameRate = 60; 
}

I den här metoden representerar variabeln rl den inlästa SWF-filen. Koden anropar getAssets()-metoden för den inlästa SWF-filen, hämtar listan över resurser som är tillgängliga och använder dem för att fylla i en ComboBox-komponent med en lista över tillgängliga resurser genom att anropa populateDropDown()-metoden. Den metoden i sin tur lagrar den fullständiga klassökvägen för varje resurs. När du klickar på Lägg till i användargränssnittet aktiveras addAsset()-metoden:

private function addAsset():void 
{ 
    var className:String = assetNameCbo.selectedItem.data; 
    var AssetClass:Class = getDefinitionByName(className) as Class; 
    var mc:MovieClip = new AssetClass(); 
    ... 
}

Nu hämtas klassökvägen för den resurs som för närvarande har valts i ComboBox (assetNameCbo.selectedItem.data) och funktionen getDefinitionByName() (från flash.utils-paketet) används för att hämta en faktisk referens till resursens klass för att skapa en ny instans av resursen.