Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Bibliothèque partagée sous Flash 9

Compatible Flash CS3. Cliquer pour en savoir plus sur les compatibilités.Compatible ActionScript 3. Cliquer pour en savoir plus sur les compatibilités.Par ITERATIF (Olivier Bugalotto)

Dans la nouvelle architecture de AS3, Nous n'avons plus besoin d'un identifiant pour attacher un MovieClip à la scène une simple instance de la classe MovieClip suffit…

Exemple :

var mc:MovieClip = new MovieClip();
addChild(mc);

Il en va de même pour les images importées dans la bibliothèques, nous savons qu'un symbole Clip est de type MovieClip et bien une image dans la bibliothèque est de type BitmapData, exemple pour une image dans la bibliothèque dont le nom de classe est Calvin :

var calvin:Calvin = new Calvin();
var bitmap:Bitmap = new Bitmap(calvin);
addChild(bitmap);

Avant d'aller plus loin, les fichiers swf sont des applications qui contiennent un domain d'application propre à chacune d'elle. Ce domain d'application existe par le biais de la classe ApplicationDomain qui nous renseigne sur les classes(types) présentes dans une application, ca veut dire qu'une application peut s'auto-decrire… dans le sens large du terme. Pourquoi je vous parle de ca et bien c'est à l'aide de ce mécanisme que nous allons pouvoir utiliser le contenu d'une application chargée, rien ne vaut un exemple pour bien comprendre tout mon charabia…

Dans une première application, qui sera ma librairie, je crée 2 symboles Clip, un carre, un circle et une image que j'ai importé. Je les exporte pour Actionscript et je laisse Flash 9 auto-generer les classes correspondantes. Dans le cas de mon image, je lui donne un nom plus simple et court :

Maintenant dans une seconde application, je charge ma librairie à l'aide de la classe Loader de la manière suivante :

var url:URLRequest = new URLRequest();
url.url = "library.swf";
 
function completeHandler(e:Event):void {
	// On fait appel au domain d'application du fichier library que l'on vient de charger
	// pour instancier des objets Square ,Circle...
	var domain:ApplicationDomain = loader.contentLoaderInfo.applicationDomain;
 
        // On se sert de la methode getDefinition pour obtenir comme son nom l'indique
        // une definition de classe
	var CircleClass:Class = domain.getDefinition("Circle");
	var SquareClass:Class = domain.getDefinition("Square");
	var CalvinClass:Class = domain.getDefinition("Calvin");
 
	var c:Object = new CircleClass();
	c.x = 100;
	c.y = 250;
 
	var s:Object = new SquareClass();
	s.x = 10;
	s.y = 25;
 
	var calvin:BitmapData = new CalvinClass();
	var bitmap:Bitmap = new Bitmap(calvin);
	bitmap.x = 250;
	bitmap.y = 100;
 
	addChild(bitmap);
	addChild(c);
	addChild(s);
}
 
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
loader.load(url);

Vous trouverez les sources de cette exemple, ici : bibliotheque_partage_flash_9.zip

Comme je le dis souvent, il faut changer la manière de penser avec Flash 9 même si c'est une version preview … ;)

A lire également : Bibliothèque partagée sous Flash 9 (suite)

Par ITERATIF - BUGALOTTO Olivier (2006) Vous pouvez retrouver ce tutorial et des commentaires à ce sujet sur mon blog