La classe Loader et la méthode describeType

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

La classe Loader est la remplacante de la classe MovieClipLoader, sont utilisation est quasi identique mais la ressemblance s'arrete la. Pour manipuler le contenu téléchargé à savoir .swf, .jpg, .png et .gif, on utilise la propriété de cette dernière content, j'ai passé cette propriété dans la moulinette de describeType et la surprise…

J'ai un fichier Chat.swf dans lequel j'ai crée la classe Chat et instanciée cette dernière sur la scène. Dans un nouveau document Flash, j'entre le code suivant :

import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.*;
 
// gestionnaire execute lorsque le swf est charge
function completeHandler(e:Event) {
	var type:XML = flash.utils.describeType(imageLoader.content);
	trace(type);
}
 
// Chemin d'acces au fichier Chat.swf
var url:String = "../Domain/Chat.swf";
// Construction d'un objet URLRequest qui encapsule le chemin d'accès
var urlRequest:URLRequest = new URLRequest(url);
 
// Instance d'un objet Loader
var imageLoader:Loader = new Loader();
// Ecoute de l'évènement COMPLETE
imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
// Lancer le chargement
imageLoader.load(urlRequest);

En executant ce code, je vois que le swf lui-meme qui est un MovieClip (ca tout le monde le sait) est passé a la moulinette grace à describeType mais mieux encore j'y retrouve ma variable c de type Chat comme propriété du MovieClip (ce qui est logique, vous me direz) :

 <extendsClass type="Object"/>
   <implementsInterface type="flash.events::IEventDispatcher"/>
   <implementsInterface type="flash.display::IBitmapDrawable"/>
   **<variable name="c" type="Chat"/>**
   <accessor name="totalFrames" access="readonly" type="int" declaredBy="flash.display::MovieClip"/>
   <method name="gotoAndPlay" declaredBy="flash.display::MovieClip" returnType="void">
     <parameter index="1" type="Object" optional="false"/>
     <parameter index="2" type="String" optional="true"/>
   </method>

Ce qui me vient à l'esprit, c'est de passer le nom de ma variable c présent dans le fichier Chat.swf:

...
var type:XML = flash.utils.describeType(imageLoader.content.c);
trace(type);
...

Et voila ce que j'obtiens :

 <type name="Chat" base="Object" isDynamic="false" isFinal="false" isStatic="false">
   <extendsClass type="Object"/>
   <constructor>
     <parameter index="1" type="String" optional="false"/>
     <parameter index="2" type="Number" optional="false"/>
   </constructor>
   <variable name="nom" type="String"/>
   <variable name="age" type="Number"/>
   <method name="dormir" declaredBy="Chat" returnType="void"/>
   <method name="manger" declaredBy="Chat" returnType="void"/>
 </type>

Pleins d'infos sur ma classe Chat ;)

Imaginer, les applications que l'on peut faire …

C'est la que l'on se rend compte de la puissance du flash player (AVM2) …

vous trouverez l'exemple de ce post ici : Loader

Pour ce que ca interesse sur mon blog, j'ai réalisé une application de Reflexion du code : iReflexion

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

 
Le contenu de cet article est la propriété de son auteur : ITERATIF (Olivier Bugalotto) .
Toute distribution ou adaptation est interdite sans l'autorisation expresse de l'auteur. Si besoin, vous pouvez essayer de contacter ITERATIF (Olivier Bugalotto) par l'intermédiaire du forum.
Contact Ressources Mediabox

Ces pages de ressources collaboratives Mediabox sont mises en ligne en utilisant Dokuwiki