Esempio di clip filmato: RuntimeAssetsExplorer

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

La funzionalità Esporta per ActionScript può rivelarsi particolarmente vantaggiosa per le librerie che possono essere utili in più progetti. Se Flash Player o AIR eseguono un file SWF, i simboli esportati in ActionScript sono disponibili per qualsiasi file SWF all'interno della stessa funzione di sicurezza sandbox del file SWF che li ha caricati. In tal modo, un solo documento Flash può generare un file SWF che viene definito al solo scopo di contenere delle risorse grafiche. Questa tecnica è particolarmente utile per i progetti di grandi dimensioni in cui i designer grafici lavorano in parallelo agli sviluppatori; questi ultimi creano un file SWF “wrapper” che successivamente carica il file SWF delle risorse grafiche in fase di runtime. Questo metodo può essere utilizzato per mantenere una serie di versioni di un file in cui le risorse grafiche non dipendono dall'avanzamento dello sviluppo della programmazione.

L'applicazione RuntimeAssetsExplorer carica qualunque file SWF che sia una sottoclasse di RuntimeAsset e consente di sfogliare le risorse disponibili su tale file SWF. Questa situazione è mostrata nell'esempio seguente:

  • Caricamento di un file SWF esterno mediante Loader.load()

  • Creazione dinamica di un simbolo di libreria esportato per ActionScript

  • Controllo ActionScript della riproduzione di MovieClip

Prima di cominciare, osservate che ciascuno dei file SWF da eseguire in Flash Player deve trovarsi nella stessa funzione di sicurezza sandbox. Per ulteriori informazioni, vedete Sandbox di sicurezza.

Per ottenere i file dell'applicazione per questo esempio, scaricate gli Esempi Flash Professional. I file dell'applicazione RuntimeAssetsExplorer sono disponibili nella cartella Samples/RuntimeAssetsExplorer. L'applicazione è composta dai seguenti file:

File

Descrizione

RuntimeAssetsExample.mxml

o

RuntimeAssetsExample.fla

Interfaccia utente dell'applicazione per Flex (MXML) o Flash (FLA).

RuntimeAssetsExample.as

Classe di documento per l'applicazione Flash (FLA).

GeometricAssets.as

Una classe di esempio che implementa l'interfaccia RuntimeAsset.

GeometricAssets.fla

Un file FLA collegato a una classe GeometricAssets (classe documento del file FLA) che contiene i simboli che vengono esportati per ActionScript.

com/example/programmingas3/runtimeassetexplorer/RuntimeLibrary.as

Interfaccia che definisce i metodi obbligatori previsti per tutti i file SWF delle risorse di runtime che verranno caricati nel contenitore dell'applicazione di esplorazione.

com/example/programmingas3/runtimeassetexplorer/AnimatingBox.as

La classe del simbolo di libreria, che ha la forma di una scatola rotante.

com/example/programmingas3/runtimeassetexplorer/AnimatingStar.as

La classe del simbolo di libreria, che ha la forma di una stella rotante.

Definizione di un'interfaccia per la libreria di runtime

Per consentire all'applicazione di esplorazione di interagire correttamente con una libreria SWF, la struttura delle librerie delle risorse di runtime deve essere formalizzata. A tale scopo, viene creata un'interfaccia, che è simile a una classe nel senso che rappresenta una base di partenza dei metodi che contrassegnano una struttura prevista, ma che a differenza di una classe non contiene i corpi dei metodi stessi. L'interfaccia fornisce un modo per consentire la comunicazione tra la libreria di runtime e l'applicazione di esplorazione. Ogni file SWF di risorse di runtime che viene caricato nel browser implementa questa interfaccia. Per ulteriori informazioni sulle interfacce e la loro utilità, vedete Interfacce in Apprendimento di ActionScript 3.0.

L'interfaccia RuntimeLibrary è molto semplice: è richiesta esclusivamente una funzione in grado di fornire all'applicazione di esplorazione un array di percorsi di classe per i simboli da esportare e disponibili nella libreria di runtime. A tale scopo, l'interfaccia contiene un solo metodo getAssets().

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

Creazione del file SWF della libreria di risorse

Definendo l'interfaccia RuntimeLibrary, è possibile creare più file SWF di librerie di risorse che possono essere caricati in un altro file SWF. La creazione di una singola libreria SWF richiede quattro operazioni:

  • Creazione di una classe per il file SWF della libreria di risorse

  • Creazione delle classi per le singole risorse contenute nella libreria

  • Creazione delle risorse grafiche vere e proprie

  • Associazione degli elementi grafici alle classi e pubblicazione del file SWF della libreria

Creazione di una classe per l'implementazione dell'interfaccia RuntimeLibrary

A questo punto, verrà creata la classe GeometricAssets che implementa l'interfaccia RuntimeLibrary. Si tratta della classe document del file FLA. Il codice di questa classe è molto simile all'interfaccia RuntimeLibrary; la differenza consiste nel fatto che nella definizione della classe il metodo getAssets() ha un corpo del metodo.

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

Nel caso sia necessario creare una seconda libreria runtime, è possibile creare un altro file FLA in base a un'altra classe (ad esempio, AnimationAssets) che fornisce la propria implementazione getAssets().

Creazione delle classi per ciascuna risorsa di MovieClip

Nell'esempio in questione, viene semplicemente estesa la classe MovieClip senza aggiungere alcuna funzionalità alle risorse personalizzate. Il codice successivo per AnimatingStar è simile a quello di AnimatingBox:

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

Pubblicazione della libreria

A questo punto verranno collegate le risorse basate su MovieClip alla nuova classe creando un nuovo file FLA e immettendo GeometricAssets nel campo Classe documento della finestra di ispezione Proprietà. Ai fini dell'esempio, verranno create due forme molto elementari che utilizzano un'interpolazione di linea temporale per creare una rotazione oraria lungo 360 fotogrammi. I simboli animatingBox e animatingStar sono entrambi impostati su Esporta per ActionScript e hanno il campo Classe impostato sui rispettivi percorsi di classe specificati nell'implementazione getAssets(). La classe di base predefinita di flash.display.MovieClip rimane, dal momento che l'obiettivo è estendere i metodi MovieClip standard.

Una volta specificate le impostazioni di esportazione del simbolo, pubblicare il file FLA. Si ottiene la prima libreria di runtime. Questo file SWF può essere caricato in un altro SWF AVM2 per rendere i simboli AnimatingBox e AnimatingStar disponibili per il nuovo file SWF.

Caricamento della libreria in un altro file SWF

L'ultima parte della funzione consiste nell'interfaccia utente per l'applicazione di esplorazione delle risorse. In questo esempio, il percorso della libreria di runtime è codificato nella variabile ASSETS_PATH. In alternativa, potreste utilizzare la classe FileReference: ad esempio, per creare un'interfaccia che permetta di individuare un determinato file SWF sul disco rigido.

Quando la libreria di runtime è stata caricata correttamente, viene chiamato il metodo runtimeAssetsLoadComplete().

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

In questo metodo, la variabile rl rappresenta il file SWF caricato. Il codice chiama il metodo getAssets() del file SWF caricato e ottiene l'elenco delle risorse disponibili, che utilizza per compilare un componente ComboBox con un elenco di risorse disponibili chiamando il metodo populateDropDown(). A propria volta, questo metodo memorizza il percorso di classe completo di ogni risorsa. Se fate clic sul pulsante Aggiungi dell'interfaccia utente, viene attivato il metodo addAsset():

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

che ottiene il percorso di classe della risorsa attualmente selezionata nel componente ComboBox (assetNameCbo.selectedItem.data) e utilizza la funzione getDefinitionByName() (del pacchetto flash.utils) per ottenere un riferimento reale alla classe della risorsa per poter creare una nuova istanza di tale risorsa.