Movieclip-Beispiel: RuntimeAssetsExplorer

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Die Funktion „Export für ActionScript“ ist besonders nützlich bei Bibliotheken, die möglicherweise in mehreren Projekten verwendet werden. Wenn Flash Player oder AIR eine SWF-Datei ausführt, stehen nach ActionScript exportierte Symbole jeder SWF-Datei zur Verfügung, die sich in der gleichen Sicherheits-Sandbox befindet wie die ladende SWF-Datei. Auf diese Weise kann in einem Flash-Dokument eine SWF-Datei erstellt werden, die nur zum Speichern grafischer Elemente dient. Dieses Verfahren eignet sich besonders für größere Projekte, bei denen Designer, die visuelle Elemente bearbeiten, parallel mit Entwicklern arbeiten, die eine „umhüllende“ SWF-Datei erstellen, über die dann die SWF-Datei mit den grafischen Elementen zur Laufzeit geladen wird. Mit diesem Verfahren können Sie mehrere Dateiversionen verwalten, in denen grafische Elemente nicht von der Programmierentwicklung abhängen.

Mit der Anwendung „RuntimeAssetsExplorer“ werden alle SWF-Dateien geladen, die Unterklassen der RuntimeAsset-Klasse sind. Mit dieser Anwendung können Sie zudem die verfügbaren Elemente dieser SWF-Dateien durchsuchen. Mit diesem Beispiel wird Folgendes veranschaulicht:

  • Laden einer externen SWF-Datei mit Loader.load()

  • Dynamisches Erstellen eines in ActionScript exportierten Bibliothekssymbols

  • Steuern der MovieClip-Wiedergabe über ActionScript

Beachten Sie zunächst, dass sich alle in Flash Player auszuführenden SWF-Dateien in der gleichen Sicherheits-Sandbox befinden müssen. Weitere Informationen finden Sie unter Sicherheits-Sandboxen .

Die Anwendungsdateien für dieses Beispiel stehen über die Flash Professional-Beispiele zum Download bereit. Die Dateien der Anwendung „RuntimeAssetsExplorer“ befinden sich im Ordner „Samples/RuntimeAssetsExplorer“. Die Anwendung umfasst die folgenden Dateien:

Datei

Beschreibung

RuntimeAssetsExample.mxml

oder

RuntimeAssetsExample.fla

Die Benutzeroberfläche der Anwendung im Flex-Format (MXML) oder Flash-Format (FLA).

RuntimeAssetsExample.as

Document-Klasse für die Flash-Anwendung (FLA).

GeometricAssets.as

Eine Beispielklasse für die Implementierung der RuntimeAsset-Schnittstelle.

GeometricAssets.fla

Eine FLA-Datei, die mit der GeometricAssets-Klasse (die Dokumentklasse der FLA-Datei) verknüpft ist und Symbole enthält, die für ActionScript exportiert werden.

com/example/programmingas3/runtimeassetexplorer/RuntimeLibrary.as

Eine Schnittstelle, in der die erforderlichen Methoden aller SWF-Dateien mit Laufzeitelementen definiert sind, die im Explorer-Container geladen werden.

com/example/programmingas3/runtimeassetexplorer/AnimatingBox.as

Die Klasse des Bibliothekssymbols in Form eines sich drehenden Feldes.

com/example/programmingas3/runtimeassetexplorer/AnimatingStar.as

Die Klasse des Bibliothekssymbols in Form eines sich drehenden Sterns.

Erstellen einer Schnittstelle für die Laufzeitbibliothek

Damit über den Explorer ordnungsgemäß auf eine SWF-Bibliothek zugegriffen werden kann, muss die Struktur der Laufzeit-Elementbibliotheken formalisiert werden. Dies erfolgt durch Erstellen einer Schnittstelle. Diese ähnelt einer Klasse, da sie einen Entwurf der Methoden enthält und die zu erwartende Struktur festlegt. Im Gegensatz zu einer Klasse wird jedoch nicht der Methodenrumpf angegeben. Über die Schnittstelle kann eine Verbindung zwischen der Laufzeitbibliothek und dem Explorer hergestellt werden. Jede SWF-Datei mit Laufzeitelementen, die im Browser geladen wird, implementiert diese Schnittstelle. Weitere Informationen zu Schnittstellen und ihren Verwendungsmöglichkeiten finden Sie im Abschnitt zu Schnittstellen im ActionScript 3.0 – Arbeitshandbuch .

Die RuntimeLibrary-Schnittstelle ist sehr einfach. Es wird lediglich eine Funktion benötigt, über die im Explorer ein Array mit Klassenpfaden verfügbar ist, damit die Symbole exportiert werden und in der Laufzeitbibliothek zur Verfügung stehen. Zu diesem Zweck enthält die Schnittstelle eine einzige Methode: getAssets() .

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

Erstellen der SWF-Datei für die Elementbibliothek

Mit der Definition der RuntimeLibrary-Schnittstelle können mehrere SWF-Dateien für die Elementbibliothek erstellt werden, die in eine andere SWF-Datei geladen werden können. Die Erstellung einer SWF-Datei für die Elementbibliothek umfasst vier Aufgaben:

  • Erstellen einer Klasse für die SWF-Datei der Elementbibliothek

  • Erstellen von Klassen für einzelne Elemente in der Bibliothek

  • Erstellen der eigentlichen grafischen Elemente

  • Verknüpfen der grafischen Elemente mit Klassen und Veröffentlichen der SWF-Datei für die Bibliothek

Erstellen einer Klasse zum Implementieren der RuntimeLibrary-Schnittstelle

Im Folgenden wird die GeometricAssets-Klasse erstellt, mit der die RuntimeLibrary-Schnittstelle implementiert wird. Dabei handelt es sich um die Dokumentklasse der FLA-Datei. Der Code für diese Klasse ähnelt dem Code für die RuntimeLibrary-Schnittstelle mit dem Unterschied, dass in der Klassendefinition der getAssets() -Methode der Methodenrumpf angegeben ist.

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

Im Fall der Erstellung einer zweiten Laufzeitbibliothek kann eine weitere FLA-Datei auf der Grundlage einer anderen Klasse (z. B. „AnimationAssets“) erstellt werden, die wiederum eine eigene Implementierung von getAssets() enthält.

Erstellen von Klassen für jedes MovieClip-Element

In diesem Beispiel wird die MovieClip-Klasse lediglich erweitert, ohne dass weitere Funktionen zu den benutzerdefinierten Elementen hinzugefügt werden. Der folgende Code für AnimatingStar ist analog zum Code für AnimatingBox:

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

Veröffentlichen der Bibliothek

Die MovieClip-Elemente werden nun mit der neuen Klasse verknüpft. Dazu wird eine neue FLA-Datei erstellt und im Eigenschafteninspektor wird im Feld „Dokumentklasse“ die GeometricAssets-Klasse eingegeben. In diesem Beispiel werden zwei einfache Formen erstellt, die mit einem Zeitleisten-Tween über 360 Bilder einmal im Uhrzeigersinn gedreht werden. Für die beiden Symbole animatingBox und animatingStar wird die Option „Export für ActionScript“ aktiviert und im Feld „Klasse“ jeweils der entsprechende in der getAssets() -Implementierung angegebene Klassenpfad eingegeben. Die Standardbasisklasse von flash.display.MovieClip wird beibehalten, da Unterklassen der MovieClip-Standardmethoden erstellt werden sollen.

Legen Sie die Exporteinstellungen für das Symbol fest und veröffentlichen Sie dann die FLA-Datei. Damit ist die erste Laufzeitbibliothek erstellt. Diese SWF-Datei kann beispielsweise in einer anderen AVM2-SWF-Datei geladen werden. Das AnimatingBox-Symbol und das AnimatingStar-Symbol sind dann in der neuen SWF-Datei verfügbar.

Laden der Bibliothek in eine andere SWF-Datei

In einem letzten Schritt muss die Benutzeroberfläche für den Elemente-Explorer erstellt werden. In diesem Beispiel ist der Pfad für die Laufzeitbibliothek in der Variablen ASSETS_PATH hartkodiert (fest vorgegeben). Alternativ können Sie mithilfe der FileReference-Klasse beispielsweise eine Benutzeroberfläche erstellen, über die nach einer bestimmten SWF-Datei auf der Festplatte gesucht wird.

Nach dem erfolgreichen Laden der Laufzeitbibliothek wird die runtimeAssetsLoadComplete() -Methode in Flash Player aufgerufen:

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

In dieser Methode wird die geladene SWF-Datei durch die Variable „rl“ dargestellt. Im Code wird die getAssets() -Methode der geladenen SWF-Datei aufgerufen; damit wird die Liste der verfügbaren Elemente abgerufen. Anhand dieser Elemente wird durch Aufrufen der populateDropDown() -Methode eine ComboBox-Komponente mit der Liste verfügbarer Elemente gefüllt. Mit dieser Methode wird wiederum der vollständige Klassenpfad jedes Elements gespeichert. Durch Klicken auf die Schaltfläche „Add“ der Benutzeroberfläche wird die addAsset() -Methode ausgelöst:

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

Dadurch werden der Klassenpfad des derzeit in der ComboBox-Komponente ( assetNameCbo.selectedItem.data ) ausgewählten Elements sowie mithilfe der getDefinitionByName() -Funktion (aus dem flash.utils-Paket) ein Verweis auf die Klasse des Elements abgerufen, sodass eine neue Instanz des Elements erstellt wird.