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
Encore des questions? Besoin d'aide? Venez en discuter sur les forums Programmation Dynamique ou Programmation Actionscript.