raph37 Posté 24 Février 2011 Posté 24 Février 2011 (modifié) Bonjour a tous ! Je me permet de venir m'éclairer de vos lumières . Pour commencer je vais vous expliquer ce que je veux réaliser . Je tente de faire un programme flash AS3 qui me permet de charger des images a partir d'un fichier XML, et de redimensionner et placer celles ci de manière homogène sur ma scene . J'utilise une fonction de type Event:Complete pour charger mon ficher XML . Par la suite, dans cette fonction j'appelle une autre fonction du meme type pour charger mes images . Le problème se trouve a ce moment là , je n'arrive pas a récupérer les variables de la fonction "parente" . Explication par la code : import flash.events.Event;stop();var Hauteur:Number = 90 ;var Largeur:Number = 90 ;var option_url:String = loaderInfo.parameters.option ; // récupère l'url du fichier XML par la variable placé dans le code HTMLvar loader_XML:URLLoader = new URLLoader(); // créé un nouveau loader URLloader_XML.addEventListener(Event.COMPLETE,LOAD_BIBLIO_COMPLETE); // Ecoute d'un évènement COMPLETE par le loaderloader_XML.load(new URLRequest(option_url))// Chargement d'un fichier dans le loader par une URL function LOAD_BIBLIO_COMPLETE(charge_bib:Event):void // Fonction evenementiel utilisé lors d'un retour COMPLETE { charge_bib.target.removeEventListener(Event.COMPLETE, LOAD_BIBLIO_COMPLETE ); // Suppression de l'écouteur var xml:XML = new XML(charge_bib.target.data); // variable XML = charge le type xml du fichier renvoyé par loader_XML for(var i=0;i < xml.image.length(); i++) // boucle listant tout le contenu des balise contenu dans le fichier XML { CREATE_IMG(xml.image[i].cible,i); // Appel la fonction qui créé un nouveau loader (d'image) }}function LOAD_IMG_COMPLETE(charge_img:Event):void // Fonction evenementiel utilisé lors d'un retour COMPLETE { charge_img.target.removeEventListener(Event.COMPLETE, LOAD_IMG_COMPLETE );// suppression de l'écouteur charge_img.target.width=Largeur; // (edit...) charge_img.target.height=Hauteur; // (edit...) // ICI j'aimerai charger la variable $i de la fonction parente.}var CREATE_IMG = function($src:String,$i:Number) // création d'une fonction permetant la création d'un nouveau loader{ var loader_IMG:Loader = new Loader (); loader_IMG.contentLoaderInfo.addEventListener(Event.COMPLETE,LOAD_IMG_COMPLETE); // Ecoute si l'image est chargé completement loader_IMG.load(new URLRequest($src))// créé une requette URL vers le fichier listé loader_IMG.name="Num"+$i;} Je ne sais pas si je suis bien claire et si mon code est "propre" lol . En tous cas , j'espère que ce sera assez compréhensible et que vous pourrez m'aider a mieux comprendre AS3 . si quelqu'un a une meilleur méthode et plus simple , je suis preneur . Merci beaucoup Modifié 24 Février 2011 par raph37
raph37 Posté 25 Février 2011 Auteur Posté 25 Février 2011 (modifié) J'ai trouvé une façon d'arriver à mes fins et aussi j'ai simplifié le code . ce script n'affiche pas les images dans l'ordre du fichier xml , mais du fichier (image) chargé du plus vite au moins vite. Il redimensionne et place les image a égale distance . Si vous trouvez que mon code est nulle ou que mes commentaires sont a coté de la plaque, n'hésitez pas a me le dire ou a m'aider a le modifier merci . la prochaine étape sera d'afficher les images dans l'ordre du fichier xml import flash.events.Event;stop();var Hauteur:Number = 100 ;var Largeur:Number = 100 ;var espace:Number = 10 ;var distance:Number = 0 ;var option_url:String = loaderInfo.parameters.option ; // récupère l'url du fichier XML par la variable placé dans le code HTMLvar loader_XML:URLLoader = new URLLoader(); // créé un nouveau loader URLloader_XML.addEventListener(Event.COMPLETE,LOAD_BIBLIO_COMPLETE); // Ecoute d'un évènement COMPLETE par le loaderloader_XML.load(new URLRequest(option_url))// Chargement d'un fichier dans le loader par une URL var str_replace = function(original:String,old:String,now:String):String{return (original.split(old)).join(now);}function LOAD_BIBLIO_COMPLETE(charge_bib:Event):void // Fonction evenementiel utilisé lors d'un retour COMPLETE { charge_bib.target.removeEventListener(Event.COMPLETE, LOAD_BIBLIO_COMPLETE ); // Suppression de l'écouteur var xml:XML = new XML(charge_bib.target.data); // variable XML = charge le type xml du fichier renvoyé par loader_XML for(var i=0;i < xml.image.length(); i++) // boucle listant tout le contenu des balise contenu dans le fichier XML { var loader_IMG:Loader = new Loader (); loader_IMG.name="Num"+i; loader_IMG.contentLoaderInfo.addEventListener(Event.COMPLETE,LOAD_IMG_COMPLETE); // Ecoute si l'image est chargé completement loader_IMG.load(new URLRequest(xml.image[i].cible))// créé une requette URL vers le fichier listé }}function LOAD_IMG_COMPLETE(charge_img:Event):void // Fonction evenementiel utilisé lors d'un retour COMPLETE { charge_img.target.removeEventListener(Event.COMPLETE, LOAD_IMG_COMPLETE );// suppression de l'écouteur var $i:Number = str_replace(charge_img.target.loader.name,"Num",""); // retrouve le numéro de l'image par une fonction str_replace var proportion:Number = charge_img.target.height / Hauteur; // variable du facteur proportionnel var Largeur:Number = charge_img.target.loader.width / proportion; // variable de la largeur proportionnel charge_img.target.content.width=Largeur; // redimensionnement de la largeur du loader charge_img.target.content.height=Hauteur; // redimensionnement de la hauteur du loader addChild(charge_img.target.loader); // ajoute le loader sur la scène charge_img.target.loader.content.x=distance; // placement du loader sur l'axe x = a la variable distance qui s'implémente a chaque images distance = distance + espace + Largeur; // la variable distance additionne sa valeur précédente avec l'espace et la largeur pour placer la prochaine image plus loin. } Modifié 25 Février 2011 par raph37
raph37 Posté 25 Février 2011 Auteur Posté 25 Février 2011 Bon ok je suis un boulet ! surtout que c'est les bases ... il suffisait de la déclarer a l'extérieur des fonctions , ainsi la valeur peut être récupérée de n'importe ou ...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant