XML et AS3 : récupérer dynamiquement les noeuds (avec une variable)

chanteur fou fou - 22 janv. 2013 à 13:59
 chanteur fou fou - 18 avril 2013 à 23:43
Bonjour

Voici mon problème :

j'ai dans ma scène, une vintaine de boutons. ils sont dans un clip (touttexte).

Pour leurs attribuer des événement j'ai procédé de la manière suivante :

================================================

var menu_array : Array = [touttexte.rentable, touttexte.bugge, touttexte.crame, touttexte.effrayant, touttexte.copiesursonvoisin, touttexte.attendu, touttexte.freestyle, touttexte.memepaspeur, touttexte.mortel, touttexte.familiale, touttexte.enerve, touttexte.hollywoodien, touttexte.decale, touttexte.viril, touttexte.infidele, touttexte.chronophage, touttexte.ecolo, touttexte.lepluslong, touttexte.sensdessusdessous, touttexte.tank, touttexte.traumatisant, touttexte.cinqetoiles, touttexte.crevant, touttexte.controverse, touttexte.joue];

for (var i:int=0; i<menu_array.length; i++) {
menu_array[i].buttonMode = true;
menu_array[i].addEventListener(MouseEvent.MOUSE_OVER, scaleUp);
menu_array[i].addEventListener(MouseEvent.MOUSE_OUT, scaleDown);
menu_array[i].addEventListener(MouseEvent.CLICK, clickHandler);
}

================================================

pour le MouseEvent.CLICK voici ce qui est défini :

=================================================

function clickHandler(e:MouseEvent):void{

conteneurinfos.x = 280;
conteneurinfos.y = 580;

importxml();

e.currentTarget.transform.colorTransform = myColor2;
}

====================================================

l'idée, c'est que à chaque fois que je clique sur un bouton, un clip du nom de conteneurinfos affiche des infos présentes dans un fichier XML via un texte dynamique contenu dans conteneurinfos.

Pour celà, à chaque clic, je me connecte au XML via la fonction importxml();

Voici le code pour importer le XML :

=========================================================

function importxml():void
{
// création du conteneur de l'image ou du swf
var conteneurImage:Loader = new Loader();

var xmlData1:XML = new XML();
var theURL_ur1:URLRequest = new URLRequest("textejeu.xml");
var loader_ul1:URLLoader = new URLLoader(theURL_ur1);
loader_ul1.addEventListener("complete", fileLoaded1);


function fileLoaded1(e:Event):void
{
xmlData1 = XML(loader_ul1.data);
// url de l'image ou du swf à charger
for (var j:uint = 0; j < this.firstChild.childNodes.length; j++)
{
var image:URLRequest = new URLRequest(xmlData1.textejeu[0].@image);
conteneurinfos.infotitrejeu.htmlText = xmlData1.textejeu[0].@titre;
conteneurinfos.infotextejeu.htmlText = xmlData1.textejeu[0];
// chargement de l'image ou du swf dans le conteneur
conteneurImage.load(image);
//conteneurinfos.chargeurimage.load(image);
conteneurImage.x=-80;
conteneurImage.y=-200;
// affichage du conteneur
conteneurinfos.chargeurimage.addChild(conteneurImage);
//addChild(_root.conteneurinfos.chargeurimage);
}
}
=======================================================

Celà marche très bien car ici je mets la valeur fixe pour un noeud : 0,1,2,3 etc.

Comme vous l'avez compris, ce que j'aimerai, c'est que lorsque je clique sur un bouton, je récupère le noeud qui doit correspondre...

évidement remplacer [0] par [i] ne marche pas (sûrement car la variable i n'est pas défini)... Bref je suis débutant en AS et j'y perd mon latin

au cas où, voici à quoi ressemble mon XML :

=================================================

<?xml version='1.0' encoding='utf-8' standalone='yes'?>
<specials>
<textejeu titre='blabla' image='arbres.png'><![CDATA[blablabla blabla blablabla blablablablabla blablablablabla blablablablabla blablablablabla blablablablabla blablablablabla blablablablabla blablablablabla blablablablabla blablablablabla blablablablabla blablablablabla blablablablabla blabla ]]</textejeu>
<textejeu titre='blabla' image='plantes.png'> blabla blal blalb al</textejeu>

<textejeu titre='blabla' image='feuilles.png'> blabla blal blalb al</textejeu>

...etc...

</specials>

====================================================

J'ai essayé ça mais sans succès (à mon avis il faudrait utiliser une seule variable "i" avec des "écouteurs" ou autres pour savoir sur quel bouton on a cliqué (mettre un id au clip et l'exporter pour l'AS ???) :

for (var j:uint = 0; j < this.firstChild.childNodes.length; j++)

{
var image:URLRequest = new URLRequest(xmlData1.textejeu[j].@image);
conteneurinfos.infotitrejeu.htmlText = xmlData1.textejeu[j].@titre;
conteneurinfos.infotextejeu.htmlText = xmlData1.textejeu[j];

}

un GRAND MERCI par avance

5 réponses

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
22 janv. 2013 à 16:18
Bonjour,

Je te conseille de lire attentivement cette page : http://livedocs.adobe.com/flash/9.0_fr/ActionScriptLangRefV3/XML.html
Tu y trouveras tout ce que tu cherches au sujet des traitement et recherches dans le XML en as3.

Ta solution se trouve dans la dernière ligne de commande en bas de la page, mais pour la comprendre il faut tout lire ;)

Peg'
0
chanteur fou fou
22 janv. 2013 à 16:37
Merci ;) j'aime pas le travail mâché ! Je m'y plonge de suite
0
chanteur fou fou
23 janv. 2013 à 11:29
Malheureusement je galère et suis pris par le temps... Si quelqu'un peut me venir en aide ça serait super ! merci :)
0
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
18 avril 2013 à 19:55
Bonjour,

Je te conseild'ajouter un propriété maison sur tes boutons,dans ta boucle:

for (var i:int=0; i<menu_array.length; i++) {
menu_array[i].maprop = i;
...
}
Du coup tu peut récupérer ta valeur n'importe ou pour cibler ton noeud en fonction de ton bouton

Cordialment
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chanteur fou fou
18 avril 2013 à 23:43
merci pour cette réponse !
0
Rejoignez-nous