Webmaster Hub: AS3 fonction event, comment reccupérer une variable d'une fonction précédente? - Webmaster Hub

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

AS3 fonction event, comment reccupérer une variable d'une fonction précédente?

#1 L'utilisateur est hors-ligne   raph37 

  • Groupe : Actif
  • Messages : 40
  • Inscrit(e) : 27-juillet 10

Posté 24 février 2011 - 20:03

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 HTML
var loader_XML:URLLoader = new URLLoader(); //  créé un nouveau loader URL
loader_XML.addEventListener(Event.COMPLETE,LOAD_BIBLIO_COMPLETE); // Ecoute d'un évènement COMPLETE par le loader
loader_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" :wacko: 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 ;)

Ce message a été modifié par raph37 - 24 février 2011 - 23:51.

0

#2 L'utilisateur est hors-ligne   raph37 

  • Groupe : Actif
  • Messages : 40
  • Inscrit(e) : 27-juillet 10

Posté 25 février 2011 - 03:45

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 HTML
var loader_XML:URLLoader = new URLLoader(); //  créé un nouveau loader URL
loader_XML.addEventListener(Event.COMPLETE,LOAD_BIBLIO_COMPLETE); // Ecoute d'un évènement COMPLETE par le loader
loader_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. 
}



Ce message a été modifié par raph37 - 25 février 2011 - 03:46.

0

#3 L'utilisateur est hors-ligne   raph37 

  • Groupe : Actif
  • Messages : 40
  • Inscrit(e) : 27-juillet 10

Posté 25 février 2011 - 15:46

Bon ok je suis un boulet ! surtout que c'est les bases ... :wacko:

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 ... :whistling:
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)