[AS3] Control d'images après chargement dynamique [Résolu]

Signaler
Messages postés
2
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
7 avril 2010
-
Messages postés
2
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
7 avril 2010
-
Bonjour !

J'ai fait un paquet de recherches sur ce sujet abordé et ré-abordé, sans toutefois trouver la solution à mon problème.

Je charge des images par un xml en flash AS3. Pas de souci, je peux les afficher, les placer, et leur appliquer un scale "générique" (le même pour toutes). Je souhaite récupérer les dimensions de chacune d'entre elles (entre autres pour adapter le scale suivant la taille de l'image et les placer correctement dans ma scène).

Je me heurte au problème suivant : dans ma boucle "for each" qui parse mon xml, j'ajoute un écouteur pour m'assurer que l'image est chargée. Dans la fonction onComplete alors lancée, je trace le nom du fichier chargé : seul le nom du dernier fichier chargé est affiché, et ce autant de fois qu'il y a d'images. J'ajoute également dans la boucle un écouteur pour faire du drag, le drag ne marche que sur le dernier fichier chargé.

J'ai dû louper quelque chose : pour moi, à chaque passage de la boucle, on charge une image, lance la fonction : onComplete et rend l'image déplaçable (ne marche pas non plus en mettant l'écouteur du drag dans onComplete).

Qu'est-ce que j'ai loupé ? Peut-on récupérer les dimensions de chaque image chargée sans le renseigner dans le xml ?

D'avance merci pour votre aide !
(je suis preneur de référence de topic si cette question a déjà été résolue et que je suis malheureusement passé à côté :)

//
Voici mon fichierImages.xml :


image1.png
image2.png
image3.png





en sortie :

Fichier image3.png chargé
Fichier image3.png chargé
Fichier image3.png chargé

Et mon code AS3 :


var xmlURL:URLRequest = new URLRequest("fichierImages.xml");
var xmlLoader:URLLoader = new URLLoader(xmlURL);
xmlLoader.addEventListener(Event.COMPLETE,xmlLoaded);
var vignette_mc:smallContainer; //MovieClip créé dans la bibliothèque, petit rectangle plein illustrant une vignette standard, classe exportée pour l'Actionscipt
var i:Number = 0;


function xmlLoaded(event:Event):void
{
//Chargement du fichier XML
var dataXML = XML(event.target.data);
var imagesVehicules:XMLList = dataXML.elements();

//Chargement image par image et affichage 
for each(var image:XML in imagesTests)
{
vignette_mc = new smallContainer; //création d'une vignette standard
vignette_mc.x = 50 + i*150;
vignette_mc.y = 50 + i*50;
addChild(vignette_mc);
var imageRequest:URLRequest = new URLRequest(image);
var imageLoader:Loader = new Loader();
imageLoader.load(imageRequest);
vignette_mc.addChild(imageLoader); //import dans le MovieClip, pour voir si plus flexible que le DisplayObject -- sans succès
vignette_mc.scaleX vignette_mc.scaleY 0.5; //scale générique qui s'applique bien à chaque vignette
imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
vignette_mc.addEventListener(MouseEvent.MOUSE_DOWN, dragStart);
vignette_mc.addEventListener(MouseEvent.MOUSE_UP, dragStop);
i++;

function onComplete(event:Event):void
{
trace("Fichier " + image + " chargé");
}
}
}


function dragStart(MouseEvent):void
{
vignette_mc.startDrag();
}

function dragStop(MouseEvent):void
{
vignette_mc.stopDrag();
}	

2 réponses

Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Hello,

dans ta fonction onComplete() tu perds automatiquement l'incrementation (boucle). Il faut donc recuperer le contenu du Loader :

function onComplete(event:Event):void
{
     trace("Fichier " + event.content + " chargé");
}


De même pour tes drags :

function dragStart(MouseEvent):void
{
event.currentTarget.startDrag();
}

function dragStop(MouseEvent):void
{
event.currentTarget.stopDrag();
}



A+

-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
2
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
7 avril 2010

Bonjour,
Merci pour ta réponse !
C'est très clair, et ça marche :)

Bye !