Exportation des symboles de bibliothèque pour ActionScript

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

Par défaut, il est impossible de créer dynamiquement des occurrences de symboles de clips dans la bibliothèque d’un document Flash (c’est-à-dire de les créer entièrement en ActionScript). En effet, l’exportation de chaque symbole pour une utilisation en ActionScript accroît la taille du fichier SWF. Or, les symboles ne sont pas tous destinés à une utilisation sur la scène. C’est pourquoi, pour qu’un symbole soit disponible en ActionScript, vous devez indiquer spécifiquement que ce symbole doit être exporté pour ActionScript.

Pour exporter un symbole pour ActionScript :

  1. Sélectionnez le symbole dans le panneau Bibliothèque et ouvrez sa boîte de dialogue Propriétés.

  2. Si nécessaire, activez les paramètres avancés.

  3. Dans la boîte de dialogue Liaison, activez l’option Exporter pour ActionScript.

    Les champs Classe et Classe de base sont alors activés.

    Par défaut, le champ Classe contient le nom du symbole sans espaces (par exemple, un symbole nommé « Maison Rouge » devient « MaisonRouge »). Pour spécifier que le symbole doit utiliser une classe personnalisée pour son comportement, saisissez le nom complet de cette classe, package compris. Si vous voulez avoir la possibilité de créer des occurrences du symbole en ActionScript, sans avoir pour autant besoin de comportements supplémentaires, vous pouvez laisser ce nom de classe tel quel.

    Par défaut, le champ Classe de base a la valeur flash.display.MovieClip . Si vous voulez que votre symbole étende les fonctionnalités d’une autre classe personnalisée, vous pouvez remplacer cette valeur par le nom de votre classe, sous réserve que celle-ci étende la classe Sprite (ou MovieClip).

  4. Cliquez sur OK pour enregistrer les changements.

    A ce stade, si Flash ne détecte pas de fichier SWC lié ou de fichier ActionScript externe contenant une définition de la classe spécifiée (par exemple, si vous n’aviez pas besoin d’ajouter un comportement supplémentaire pour le symbole), un message d’avertissement apparaît :

    Le chemin de classe ne contient pas de définition pour cette classe. Une définition sera générée automatiquement dans le fichier SWF lors de l’exportation .

    Vous pouvez ignorer cet avertissement si le symbole de bibliothèque ne nécessite pas de fonctionnalités en dehors de celles de la classe MovieClip.

Si vous n’indiquez aucune classe pour votre symbole, Flash crée pour lui une classe du type de celle-ci :

package 
{ 
    import flash.display.MovieClip; 
     
    public class ExampleMovieClip extends MovieClip 
    { 
        public function ExampleMovieClip() 
        { 
        } 
    } 
}

Si vous ne souhaitez pas ajouter des fonctionnalités ActionScript au symbole, ajoutez les propriétés et méthodes nécessaires à la structure de code suivante. Supposons par exemple que vous disposez d’un symbole de clip contenant un cercle de 50 pixels de diamètre, dont le paramètre de liaison est Exporter pour ActionScript et dont la classe est Circle. Le code suivant, lorsqu’il est placé dans un fichier Circle.as, étend la classe MovieClip et fournit au symbole les méthodes supplémentaires getArea() et getCircumference() :

package  
{ 
    import flash.display.MovieClip; 
     
    public class Circle extends MovieClip 
    { 
        public function Circle() 
        { 
        } 
         
        public function getArea():Number 
        { 
        // The formula is Pi times the radius squared. 
        return Math.PI * Math.pow((width / 2), 2); 
        } 
         
        public function getCircumference():Number 
        { 
        // The formula is Pi times the diameter. 
        return Math.PI * width; 
        } 
    } 
}

Le code suivant, placé dans une image-clé à l’image 1 du document Flash, crée une occurrence du symbole et l’affiche à l’écran :

var c:Circle = new Circle(); 
addChild(c); 
trace(c.width); 
trace(c.height); 
trace(c.getArea()); 
trace(c.getCircumference());

Ce code montre comment utiliser l’instanciation ActionScript au lieu de faire glisser des actifs individuels vers la scène. Il crée un cercle qui présente toutes les propriétés d’un clip et possède les méthodes personnalisées définies dans votre classe Circle. Il s’agit d’un exemple tout à fait élémentaire ; un symbole de bibliothèque peut spécifier un nombre illimité de propriétés et de méthodes dans sa classe.

L’instanciation en ActionScript est un processus puissant, car il permet de créer dynamiquement de nombreuses occurrences qu’il serait particulièrement laborieux de créer manuellement. Elle vous apporte en outre une grande souplesse, puisque vous pouvez personnaliser les propriétés de chaque occurrence dès sa création. Pour saisir l’importance de ces avantages, vous pouvez utiliser une boucle pour créer dynamiquement plusieurs occurrences de Circle. Après avoir ajouté le symbole Circle et la classe correspondante, décrits précédemment, dans la bibliothèque de votre document Flash, placez le code suivant dans une image-clé à l’image 1 :

import flash.geom.ColorTransform; 
 
var totalCircles:uint = 10; 
var i:uint; 
for (i = 0; i < totalCircles; i++) 
{ 
    // Create a new Circle instance. 
    var c:Circle = new Circle(); 
    // Place the new Circle at an x coordinate that will space the circles 
    // evenly across the Stage. 
    c.x = (stage.stageWidth / totalCircles) * i; 
    // Place the Circle instance at the vertical center of the Stage. 
    c.y = stage.stageHeight / 2; 
    // Change the Circle instance to a random color 
    c.transform.colorTransform = getRandomColor(); 
    // Add the Circle instance to the current timeline. 
    addChild(c); 
} 
 
function getRandomColor():ColorTransform 
{ 
    // Generate random values for the red, green, and blue color channels. 
    var red:Number = (Math.random() * 512) - 255; 
    var green:Number = (Math.random() * 512) - 255; 
    var blue:Number = (Math.random() * 512) - 255; 
     
    // Create and return a ColorTransform object with the random colors. 
    return new ColorTransform(1, 1, 1, 1, red, green, blue, 0); 
}

Cet exemple illustre la rapidité avec laquelle vous pouvez créer et personnaliser plusieurs occurrences d’un symbole à l’aide de code. Chaque occurrence est positionnée en fonction du compteur de boucle. Ensuite une couleur lui est attribuée au hasard à l’aide de la propriété transform (dont Circle hérite en étendant la classe MovieClip).