Easy-Micro

ESPACEMEMBRE ActionScript
Appel

Instanciation de symboles par programmation

ActionScript Appel dynamique de clip

C'est la méthode AS2 attachMovie() qui permettait de créer une occurrence de clip depuis la bibliothèque de flash, sans avoir à positionner le clip sur la scène. En AS3 on utilise une syntaxe orientée objet avec l'opérateur new associé à une classe de clip. Cependant, et pour que cela fonctionne, il faut toujours réaliser au préalable une liaison sur le clip concerné.

Pour réaliser une liaison, affichez votre bibliothèque et faite un clic droit sur votre clip, Propriétés... Bouton Avancé... Liaison... (linkage en anglais). Cochez l'option "Exporter pour ActionScript" afin de rendre éditable les champs Classe et classe de base. Ensuite, dans le champ "Class", donnez-lui un nom de classe personnel (par exemple yoClip). Le champ classe de base indique la classe dont notre symbole héritera. Ce dernier est renseigné automatiquement (flash.display.MovieClip).
Si la classe spécifiée n'existe pas (et, c'est bien sur le cas!), Flash en génère une automatiquement.

Saisissez ensuite ce code dans la première image clé du scénario:
Exemple d'appel de clip (AS3)
// Rien la scène, "mon_clip" est dans la bibliothèque avec une liaison

// on instancie un nouvel objet à partir de la classe nouvellement créée.
var monclip:yoClip = new yoClip();

// Positionement de monclip
monclip.x = 100;
monclip.y = 100;

// Affichage de monclip avec la méthode addChild de la classe MovieClip (this est facultatif).
this.addChild(monclip);

Note: pour accèder au clip enfant du clip parent, on utilise en AS3 la syntaxe à point comme en AS2. Par exemple, pour accèder au clip "monclip2" qui se trouve dans monclip:
monclip.monclip2.rotation = 30;
On pourrais aussi créer une variable de référence vers monclip2 :
var monclipamoi:MovieClip = monclip.monclip2; monclipamoi.rotation = 30;

Variante : Affichage dans un conteneur (clip "conteneur" sur la scène)
// Affichage dans un conteneur
conteneur.addChild(monclip);
//Affichage dans un conteneur en premier plan (profondeur)
conteneur.addChildAt(monclip,1);

Profondeur de clip en AS3
La profondeur est dynamique en AS3. La première instance ajoutée avec addChild sera à l'arrière plan, la dernière sera au premier plan. La notion de profondeur pourra être gérée avec la méthode addChildAt(nom_d_instance, num_d_index) (qui remplace la méthode addChild) où l'index le plus élevé est au premier plan. En AS3 on ne peut plus positionner un clip directement sur une profondeur spécifique. Afin d'agir sur un clip dont-on connais la profondeur, on pourra utiliser la méthode getChildAt() qui attend un numéro de profondeur.

Exemple d'appel avec une profondeur (AS3) (à la place de la méthode addChild)
var monclip:yoClip = new yoClip();
this.addChildAt(monclip,0); // soit première profondeur


Exemple d'appel et de déplacement dynamique d'un clip (AS3)
Rien sur la scène, code à coller dans la première image clé du scénario

var monclip:yoClip = new yoClip();
monclip.x = 100;
monclip.y = 100;
this.addChild(monclip);

function bouge(evt:Event):void {
monclip.x = monclip.x + 5;
}

addEventListener(Event.ENTER_FRAME,bouge);

Exemple d'appel et de déplacement manuel d'un clip (AS3)
Rien sur la scène, code à coller dans la première image clé du scénario

var monclip:yoClip = new yoClip();
monclip.x = 100;
monclip.y = 100;
this.addChild(monclip);

function appuyer(evt:MouseEvent):void {
monclip.startDrag();
}
monclip.addEventListener(MouseEvent.MOUSE_DOWN, appuyer);

function relacher(evt:MouseEvent):void {
monclip.stopDrag();
}
monclip.addEventListener(MouseEvent.MOUSE_UP, relacher);

ActionScript Exemple avec la classe BitmapData
Faites un clic droit... Liaisons... sur une image jpg de votre bibliothèque (500X400). Cochez l'option "Exporter pour ActionScript" afin de rendre éditable les champs Classe et Classe de base. Donnez à votre clip un nom de classe personnel (par un clic droit... liaison), par exemple yoClip. Définissez ensuite la classe de base: "flash.display.BitmapData".

La classe BitmapData, dont hérite notre classe yoClip, est une classe qui ne contient que les données de l'image. Un objet de type BitmapData ne peut être affiché à l'écran. Pour visualiser l'image, on doit utiliser la classe Bitmap. Le constructeur Bitmap() permet de créer un objet Bitmap contenant une référence à un objet BitmapData.

Exemple avec la classe BitmapData (scène toujours vide!)

import flash.display.BitmapData; // facultatif

// >Imporation
var mondataclip:yoClip = new yoClip(0,0);

// Création
var monimgclip:Bitmap = new Bitmap(mondataclip);
// Affichage directe
addChild(monimgclip)

// Variante : Affichage dans un conteneur
var leclip:Sprite = new Sprite();
leclip.addChild(monimgclip);

// Réduire l'image à 50% de sa taille d'origine (1 correspond à 100% de la taille d'origine)
leclip.scaleX = leclip.scaleY = 0.5;
addChild(leclip);

Afin de ne pas être bloqué à la compilation, nous devons obligatoirement passer une largeur et une hauteur de 0,0. Le lecteur affiche l'image à sa taille d'origine.

// Variante d'affichage (ici dans un conteneur)

var leclip:Sprite = new Sprite();
leclip.addChild(monimgclip);

// Réduire l'image à 50% de sa taille d'origine (1 correspond à 100% de la taille d'origine)
leclip.scaleX = leclip.scaleY = 0.5;
addChild(leclip);

L'objet graphique Sprite est très proche du classique MovieClip mais il ne contient pas de scénario et donc aucune méthodes liées à sa manipulation comme gotoAndStop...
Pour créer des clips vide dynamiquement, c'est idéal car plus léger en mémoire et donc plus optimisé.

Note: Cette classe permet aussi d'importer un BMP avec sa méthode loadBitmap() comme ceci:
var mon_image:BitmapData = BitmapData.loadBitmap("photo");


< Page précédente ACTIONSCRIPT Page suivante >