Voorbeeld van een filmclip: RuntimeAssetsExplorer

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

De functie Exporteren voor ActionScript kan vooral voordelen hebben voor bibliotheken die in meer dan een project worden gebruikt. Als Flash Player of AIR een SWF-bestand uitvoert, zijn symbolen die naar ActionScript zijn geëxporteerd, beschikbaar voor elk SWF-bestand in dezelfde beveiligingssandbox als het SWF-bestand dat het laadt. Zo kan één Flash-document een SWF-bestand genereren dat alleen is bestemd voor het bevatten van grafische elementen. Deze techniek is vooral handig voor grotere projecten, waarbij ontwikkelaars die aan visuele elementen werken, tegelijkertijd kunnen samenwerken met ontwikkelaars die een omvattend SWF-bestand maken dat het SWF-bestand met grafische elementen bij uitvoering laadt. U kunt deze methode gebruiken om een serie bestandsversies te onderhouden, waarin grafische elementen niet afhankelijk zijn van de voortgang in de programmeringsontwikkeling.

De toepassing RuntimeAssetsExplorer laadt een SWF-bestand dat een subklasse van RuntimeAsset is en zorgt ervoor dat u door de beschikbare elementen van dat SWF-bestand kunt bladeren. Het voorbeeld illustreert het volgende:

  • Een extern SWF-bestand laden met behulp van Loader.load()

  • Het dynamisch maken van een bibliotheeksymbool dat voor ActionScript is geëxporteerd

  • ActionScript-beheer voor het afspelen van filmclips

Zorg voordat u begint dat elk SWF-bestand dat in Flash Player moet worden uitgevoerd, zich in dezelfde beveiligingssandbox bevindt. Zie Beveiligingssandboxen voor meer informatie.

Als u wilt beschikken over de toepassingsbestanden voor dit voorbeeld, downloadt u de Flash Professional-voorbeeldbestanden. De toepassingsbestanden van RuntimeAssetsExplorer vindt u in de map Samples/RuntimeAssetsExplorer. De toepassing bestaat uit de volgende bestanden:

Bestand

Beschrijving

RuntimeAssetsExample.mxml

of

RuntimeAssetsExample.fla

De gebruikersinterface voor de toepassing voor Flex (MXML) of Flash (FLA).

RuntimeAssetsExample.as

Klasse Document voor de Flash-toepassing (FLA).

GeometricAssets.as

Een voorbeeldklasse die de RuntimeAsset-interface implementeert.

GeometricAssets.fla

Een FLA-bestand dat is gekoppeld aan de klasse GeometricAssets (de documentklasse van de FLA), waarin symbolen zijn opgenomen die voor ActionScript zijn geëxporteerd.

com/example/programmingas3/runtimeassetexplorer/RuntimeLibrary.as

Een interface waarin wordt gedefinieerd welke vereiste methoden worden verwacht van alle SWF-bestanden met uitvoeringselementen die in de verkennercontainer worden geladen.

com/example/programmingas3/runtimeassetexplorer/AnimatingBox.as

De klasse van het bibliotheeksymbool dat de vorm van een draaiend vak heeft.

com/example/programmingas3/runtimeassetexplorer/AnimatingStar.as

De klasse van het bibliotheeksymbool dat de vorm van een draaiende ster heeft.

Een uitvoeringsbibliotheekinterface tot stand brengen

Als u wilt zorgen dat de browser goed met een SWF-bibliotheek kan communiceren, moet de structuur van de bibliotheken met uitvoeringselementen worden geformaliseerd. Hiervoor wordt een interface gemaakt, die lijkt op een klasse (het is een blauwdruk van methoden die een verwachte structuur kunnen omsluiten), waarin zich echter geen methoden bevinden. De interface biedt een manier om de uitvoeringsbibliotheek en de browser met elkaar te laten communiceren. Elke SWF met uitvoeringselementen die in uw browser wordt geladen, implementeert deze interface. Zie het onderwerp over interfaces in ActionScript 3.0 leren gebruiken voor meer informatie over interfaces en hoe u deze kunt gebruiken.

De interface RuntimeLibrary is erg eenvoudig: er is slechts een functie voor nodig die de browser een array klassenpaden voor de te exporteren symbolen biedt en die beschikbaar is in de uitvoeringsbibliotheek. Hiervoor kent de interface een enkele methode: getAssets().

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

Het SWF-bestand met de elementenbibliotheek maken

Wanneer u de interface RuntimeLibrary definieert, is het mogelijk meerdere SWF-bestanden met een elementenbibliotheek te maken die in een ander SWF-bestand kunnen worden geladen. Bij het maken van een individueel SWF-bestand met een elementenbibliotheek zijn vier taken betrokken:

  • Een klasse voor het SWF-bestand met de elementenbibliotheek maken

  • Klassen maken voor individuele elementen die zich in de bibliotheek bevinden

  • De feitelijke grafische elementen maken

  • Grafische elementen aan klassen koppelen en de bibliotheek-SWF publiceren

Een klasse maken om de interface RuntimeLibrary te implementeren

We maken nu de klasse GeometricAssets, die de interface RuntimeLibrary implementeert. Dit wordt de documentklasse van de FLA. De code voor deze klasse lijkt erg op de interface RuntimeLibrary: het verschil is dat de methode getAssets() in de klassendefinitie een methode heeft.

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" ];     
        } 
    } 
}

Als we bijvoorbeeld een tweede uitvoeringsbibliotheek maken, kunnen we een andere FLA maken, die is gebaseerd op een andere klasse (bijvoorbeeld AnimationAssets) met een eigen implementatie van getAssets().

Klassen voor elk MovieClip-element maken

In dit voorbeeld breiden we de klasse MovieClip slechts uit, zonder dat functionaliteit wordt toegevoegd aan de aangepaste elementen. De volgende code voor AnimatingStar is gelijk aan de code van AnimatingBox:

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

De bibliotheek publiceren

We koppelen de op MovieClip gebaseerde elementen nu aan de nieuwe klasse door een nieuw FLA-bestand te maken en GeometricAssets in het veld Documentklasse van Eigenschapcontrole in te voeren. In dit voorbeeld maken we twee eenvoudige vormen, die gebruik maken van een tijdlijn-tween voor een rotatie over 360 frames met de klok mee. Zowel de symbolen animatingBox als animatingStar zijn ingesteld op Exporteren voor ActionScript. Het veld Klasse is ingesteld op de respectievelijke klassenpaden, die in de implementatie getAssets() zijn opgegeven. De standaardbasisklasse flash.display.MovieClip blijft behouden, omdat we een subklasse van de standaard MovieClip-methoden willen maken.

Na het maken van de exportinstellingen voor uw symbool, publiceert u de FLA. U hebt nu uw eerste uitvoeringsbibliotheek gemaakt. Deze SWF kan in een ander AVM2 SWF-bestand worden geladen, zodat de symbolen AnimatingBox en AnimatingStar in het nieuwe SFW-bestand beschikbaar zijn.

De bibliotheek in een ander SWF-bestand laden

De laatste functie die moet worden uitgevoerd, is de gebruikersinterface voor de elementverkenner. In dit voorbeeld heeft het pad naar de uitvoeringsbibliotheek een vaste structuur, met de naam ASSETS_PATH als variabele. U kunt ook de klasse FileReference gebruiken om bijvoorbeeld een interface te maken, die op de vaste schijf naar een bepaald SWF-bestand bladert.

Wanneer het laden van de uitvoeringsbibliotheek is voltooid, roept Flash Player de methode runtimeAssetsLoadComplete() aan:

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

In deze methode vertegenwoordigt de variabele rl het geladen SWF-bestand. De code roept de methode getAssets() van het geladen SWF-bestand aan, waarbij de lijst wordt verkregen met elementen die beschikbaar zijn. De elementen worden vervolgens gebruikt om een component ComboBox te vullen met een lijst beschikbare elementen door de methode populateDropDown() aan te roepen. Deze methode slaat op zijn beurt het volledige klassenpad van elk element op. Wanneer u in de gebruikersinterface op de knop Toevoegen klikt, wordt de methode addAsset() geactiveerd:

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

het klassenpad van het op dat moment geselecteerde element in ComboBox (assetNameCbo.selectedItem.data) wordt opgehaald en de functie getDefinitionByName() (uit het pakket flash.utils) wordt gebruikt om een daadwerkelijke verwijzing naar de klasse van het element te verkrijgen, zodat een nieuwe instantie van dat element kan worden gemaakt.