Exemple de clip : RuntimeAssetsExplorer

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

La fonctionnalité Exporter pour ActionScript présente des avantages particuliers lorsque des bibliothèques peuvent être réutilisées sur plusieurs projets. Si Flash Player ou AIR exécute un fichier SWF, les symboles ayant été exportés dans ActionScript sont disponibles pour tous les fichiers SWF au sein du même sandbox de sécurité que le fichier SWF qui le charge. De cette manière, un seul document Flash peut générer un fichier SWF destiné uniquement à accueillir des éléments graphiques. Cette technique est très utile pour les grands projets dans lesquels les concepteurs graphiques chargés des éléments visuels peuvent travailler en parallèle avec les développeurs qui créent une « enveloppe » SWF qui chargera les fichiers SWF des éléments graphiques au moment de l’exécution. Cette méthode peut vous servir dans la maintenance d’un ensemble de versions de fichiers dans lesquelles les actifs graphiques ne sont pas dépendants du développement de la programmation.

L’application RuntimeAssetsExplorer charge tout fichier SWF qui est une sous-classe de RuntimeAsset et permet de consulter les éléments disponibles de ce fichier SWF. Cet exemple illustre les points suivants :

  • Chargement d’un fichier SWF externe à l’aide de Loader.load()

  • Création dynamique d’un symbole de bibliothèque exporté pour ActionScript

  • Contrôle de la lecture du MovieClip avec ActionScript

Avant de commencer, notez que tous les fichiers SWF devant s’exécuter dans Flash Player doivent se trouver dans le même sandbox de sécurité. Pour plus d’informations, voir Sandbox de sécurité.

Pour obtenir les fichiers d’application associés à cet exemple, téléchargez les exemples Flash Professional. Les fichiers de l’application RuntimeAssetsExplorer se trouvent dans le dossier Samples/Chapters/RuntimeAssetsExplorer. L’application se compose des fichiers suivants :

Fichier

Description

RuntimeAssetsExample.mxml

ou

RuntimeAssetsExample.fla

Interface utilisateur de l’application pour Flex (MXML) ou Flash (FLA).

RuntimeAssetsExample.as

Classe document pour l’application Flash (FLA).

GeometricAssets.as

Classe exemple qui implémente l’interface RuntimeAsset.

GeometricAssets.fla

Fichier FLA lié à la classe GeometricAssets (classe de document du fichier FLA) contenant les symboles exportés pour ActionScript.

com/example/programmingas3/runtimeassetexplorer/RuntimeLibrary.as

Interface qui définit les méthodes attendues par tous les fichiers SWF d’actifs d’exécution qui seront chargés dans l’explorateur.

com/example/programmingas3/runtimeassetexplorer/AnimatingBox.as

Classe du symbole de bibliothèque dont la forme est un rectangle pivotant.

com/example/programmingas3/runtimeassetexplorer/AnimatingStar.as

Classe du symbole de bibliothèque dont la forme est une étoile pivotante.

Etablissement de l’interface de bibliothèque d’exécution

Pour que l’explorateur interagisse convenablement avec une bibliothèque SWF, la structure des bibliothèques d’éléments doit être formalisée. Pour ce faire, nous allons créer une interface, que l’on pourrait comparer à une classe dans la mesure où elle représente un modèle de définition des méthodes qui définissent une structure attendue. Par contre, à l’inverse d’une classe, elle ne comporte pas les corps des méthodes. L’interface est un moyen de communication pour la bibliothèque d’éléments et l’explorateur. Chaque fichier SWF d’éléments chargé dans le navigateur implémentera cette interface. Pour plus d’informations sur l’utilité des interfaces, voir Interfaces dans Formation à ActionScript 3.0.

L’interface RuntimeLibrary est très simple, puisque nous avons uniquement besoin d’une fonction qui fournisse à l’explorateur un tableau de chemins de classe pour les symboles à exporter disponibles dans la bibliothèque. Cette interface utilise pour ce faire une seule méthode : getAssets().

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

Création de fichiers SWF de bibliothèque d’actifs

La définition de l’interface RuntimeLibrary permet de créer plusieurs fichiers SWF de bibliothèque d’actifs, qui pourront être chargés dans un autre fichier SWF. L’élaboration d’une bibliothèque SWF d’actifs repose sur quatre tâches :

  • Création d’une classe pour le fichier SWF de bibliothèque d’actifs

  • Création de classes pour les différents éléments contenus dans la bibliothèque

  • Création des éléments graphiques eux-mêmes

  • Association des éléments graphiques à des classes et publication du fichier SWF de bibliothèque

Création d’une classe pour implémenter l’interface RuntimeLibrary

Nous allons ensuite créer la classe GeometricAssets qui implémente l’interface RuntimeLibrary, et sera la classe du document FLA. Le code de cette classe est très proche de celui de l’interface RuntimeLibrary, la différence étant que la définition de classe comporte le corps de la méthode getAssets().

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

Si nous devions créer une deuxième bibliothèque d’exécution, nous pourrions créer un autre fichier FLA reposant sur une autre classe (AnimationAssets, par exemple) qui assure sa propre implémentation de getAssets().

Création de classes pour chaque élément MovieClip

Pour les besoins de cet exemple, nous étendrons simplement la classe MovieClip, sans ajouter de fonctionnalité aux éléments. Le code suivant destiné à AnimatingStar est semblable à celui de AnimatingBox :

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

Publication de la bibliothèque

Nous allons maintenant relier les actifs de classe MovieClip à la nouvelle classe en créant un fichier FLA et en entrant GeometricAssets dans le champ Classe du document de l’Inspecteur des propriétés. Pour les besoins de cet exemple, nous allons créer deux formes très simples qui utilisent une interpolation de scénario pour effectuer une rotation horaire sur 360 images. Les deux symboles animatingBox et animatingStar sont définis pour l’exportation vers ActionScript et leurs champs Classe correspondent aux chemins de classe respectifs spécifiés dans l’implémentation de getAssets(). La classe de base par défaut flash.display.MovieClip est conservée, puisque nous voulons créer des sous-classes pour les méthodes MovieClip standard.

Après définition des paramètres d’exportation de votre symbole, publiez le fichier FLA. Vous disposez maintenant de votre première bibliothèque d’exécution. Ce fichier SWF pourrait être chargé dans un autre fichier SWF AVM2, dans lequel les symboles AnimatingBox et AnimatingStar seraient disponibles.

Chargement de la bibliothèque dans un autre fichier SWF

Le dernier élément fonctionnel à traiter est l’interface utilisateur de l’explorateur. Dans cet exemple, le chemin d’accès à la bibliothèque d’exécution est codé en dur dans la variable ASSETS_PATH. Vous pourriez également utiliser la classe FileReference, par exemple pour créer une interface qui recherche un fichier SWF particulier sur le disque dur.

Une fois que la bibliothèque d’exécution est chargée, Flash Player appelle la méthode runtimeAssetsLoadComplete().

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

Dans cette méthode, la variable rl représente le fichier SWF chargé. Le code appelle la méthode getAssets() du fichier SWF chargé, obtient la liste des éléments disponibles et remplit un composant ComboBox avec cette liste en appelant la méthode populateDropDown(). Cette méthode enregistre le chemin de classe complet de chaque élément. Si l’utilisateur clique sur le bouton Ajouter, l’interface déclenche la méthode addAsset() :

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

qui obtient le chemin de classe de l’élément actuellement sélectionné dans la ComboBox (assetNameCbo.selectedItem.data), et utilise la fonction getDefinitionByName() (du package flash.utils) pour obtenir une référence à la classe de l’élément afin de créer une nouvelle occurrence de celui-ci.