Création dynamiquede menu dans une boucle AS3

cs_fraktal Messages postés 7 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 15 mars 2011 - 11 mars 2011 à 10:51
cs_fraktal Messages postés 7 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 15 mars 2011 - 15 mars 2011 à 14:27
Bonjour,

je suis en train de devellopper un site dynamique en AS3 ( je ne gere pas la prog orienté objet donc le code n'es pas du tout parfait)

J'ai un soucis, lorsque je crée mes Menu_bouton, je n'ai que le dernier qui est actif :/ .
je pense que j'utilise mal la boucle mais je ne voie pas ou ...


//import des classe
//-------------------------------------------------------------------------------
import gs.TweenMax;
import fl.motion.easing.*;
import flash.events.MouseEvent;
import flash.display.Sprite;

//-------------------------------------------------------------------------------
// Chrgement XML
//-------------------------------------------------------------------------------

var xmlURL:URLRequest = new URLRequest("Donnee.xml");

var xmlLoader:URLLoader = new URLLoader(xmlURL);

xmlLoader.addEventListener(Event.COMPLETE,xmlLoaded);

function xmlLoaded(event:Event):void

{

var dataXML = XML(event.target.data);

//-------------------------------------------------------------------------------
// Chargement du fond
//-------------------------------------------------------------------------------

trace ("/Image/Acceuil/" + dataXML.@fond)

var conteneurFond:Loader = new Loader();
// url de l'image ou du swf à charge
var imageFond:URLRequest = new URLRequest("Image/Acceuil/" + dataXML.@fond);
// chargement de l'image ou du swf dans le conteneur
conteneurFond.load(imageFond);
// affichage du conteneur
this.addChild(conteneurFond);

//-------------------------------------------------------------------------------
//Placement acceuil
//-------------------------------------------------------------------------------

//Appel librairie Logo
var Logo:Logo_l = new Logo_l();
this.addChild(Logo); 
setChildIndex(Logo,this.numChildren-1);
Logo.x = 485.5;
Logo.y = -300;

//Appel librairie Bandeau
var Bandeau:Menu_bandeau_l = new Menu_bandeau_l();
this.addChild(Bandeau);
setChildIndex(Bandeau,this.numChildren-1);
Bandeau.x = -1500;
Bandeau.y = 446;
//Bandeau.alpha = 0.4;
//Création du Menu
//trace (dataXML.Menu.@nom + "num" + dataXML.Menu.@numero)

var nbrTitres:Number;
nbrTitres=dataXML.children().length();

var Menu_tabl:Array = new Array();


for(var i:uint=0;i<nbrTitres;i++)

{

var formatMenu:TextFormat = new TextFormat();
    formatMenu.font="Tahoma";
    formatMenu.bold=false;
formatMenu.size = 24;
formatMenu.letterSpacing = 3;
formatMenu.color=0xFFFFFA;

var Menu_texte:TextField=new TextField();
var Menu_bouton:MovieClip=new MovieClip();

//Menu_texte.height=40;
//Menu_texte.width=70;
Menu_texte.x=-25 + 225 *(i+1);
Menu_texte.y=0;
Menu_texte.selectable=false;
Menu_texte.autoSize = TextFieldAutoSize.LEFT;
Menu_texte.defaultTextFormat = formatMenu;
Menu_texte.text=dataXML.Menu[i].@nom;
//Nommage des menus
Menu_bouton.name =String(i+1);
// je rempli le tableau de nom


Menu_bouton.addChild(Menu_texte);
Bandeau.addChildAt(Menu_bouton,2);

Menu_tabl.push(Menu_bouton.name);

}

//Tween acceuil
stage.addEventListener(MouseEvent.MOUSE_OVER, plac_acc_logo);

function plac_acc_logo(evt:Event) {
var plac_acc_logo:Timer = new Timer(500);

plac_acc_logo.addEventListener(TimerEvent.TIMER,plac_acc_logo_t);
plac_acc_logo.start();

function plac_acc_logo_t(evt:TimerEvent) {

TweenMax.to(Logo, 1, {x:485.5,y:95, ease:Back.easeOut});
TweenMax.to(Bandeau, 2, {x:-83 ,y:446, ease:Back.easeOut});
}
}
// Ecouteur Menu

Menu_bouton.addEventListener(MouseEvent.MOUSE_DOWN, click_menu);
function click_menu(evt:Event) {
var click_menu:Timer = new Timer(2,1);

click_menu.addEventListener(TimerEvent.TIMER,click_menu_t);
click_menu.start();

function click_menu_t(evt:TimerEvent) {


var Menu_bouton_nom:int = Menu_tabl.indexOf(evt.currentTarget);
//trace (evt.currentTarget + "et le tabl retourne" + Menu_bouton_nom);
trace(Menu_bouton.name);

}
}



//Menu_tabl.push(dataXML.Menu.@numero);


}



Merci beaucoup

11 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
11 mars 2011 à 12:12
bonjour,

Déjà, quand je vois un timer et une fonction déclarées dans une autre fonction, je me dit qu'il y a forcément un binz ...

Peg'
0
cs_fraktal Messages postés 7 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 15 mars 2011
11 mars 2011 à 15:32
Salut Peg,

Les Timers je les ai viré, j'ai suivis pas mal de tes conseils via ce topic

http://www.flashkod.com/forum/sujet-AS3-CREATION-DYNAMIQUE-BOUTONS-LEUR-ECOUTEUR-RESPECTIF_1419405.aspx

Mais mon tableau me retourne toujours -1 :/ comme pour vedelvetsyn

lorsque je trace (evt.currentTarget + "et le tabl retourne" + Menu_bouton_nom);


Merci beaucoup
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
11 mars 2011 à 15:54
c'est normal, puisqu'un TimerEvent n'a pas de cible.
D'ailleurs, je ne comprend pas ce que tu cherches à faire avec tes Timers.

Peg'
0
cs_fraktal Messages postés 7 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 15 mars 2011
11 mars 2011 à 15:58
Ben c'est une mauvaise habitude que j'ai prise en suivant des tuto sur les écoutuers ou ils utilisait des Timer
mais le probleme ne vient pas de la, je les ai viré depuis mais il n'y a que le dernier movieclip créé qui fonctionne ( j'ai les texte sur tous mai l'ecouteur click ne fonctionne que sur le dernier

mon code sans les timers :

//import des classe
//-------------------------------------------------------------------------------
import gs.TweenMax;
import fl.motion.easing.*;
import flash.events.MouseEvent;
import flash.display.Sprite;

//-------------------------------------------------------------------------------
// Chrgement XML
//-------------------------------------------------------------------------------

var xmlURL:URLRequest = new URLRequest("Donnee.xml");

var xmlLoader:URLLoader = new URLLoader(xmlURL);

xmlLoader.addEventListener(Event.COMPLETE,xmlLoaded);

var dataXML = XML(xmlLoader);

function xmlLoaded(event:Event):void

{

dataXML = XML(event.target.data);


//-------------------------------------------------------------------------------
// Chargement du fond
//-------------------------------------------------------------------------------

trace ("/Image/Acceuil/" + dataXML.@fond)

var conteneurFond:Loader = new Loader();
// url de l'image ou du swf à charge
var imageFond:URLRequest = new URLRequest("Image/Acceuil/" + dataXML.@fond);
// chargement de l'image ou du swf dans le conteneur
conteneurFond.load(imageFond);
// affichage du conteneur
this.addChild(conteneurFond);

//-------------------------------------------------------------------------------
//Placement acceuil
//-------------------------------------------------------------------------------

//Appel librairie Logo
var Logo:Logo_l = new Logo_l();
this.addChild(Logo); 
setChildIndex(Logo,this.numChildren-1);
Logo.x = 485.5;
Logo.y = -300;

//Appel librairie Bandeau
var Bandeau:Menu_bandeau_l = new Menu_bandeau_l();
this.addChild(Bandeau);
setChildIndex(Bandeau,this.numChildren-1);
Bandeau.x = -1500;
Bandeau.y = 446;
//Bandeau.alpha = 0.4;
//Création du Menu
//trace (dataXML.Menu.@nom + "num" + dataXML.Menu.@numero)

var nbrTitres:Number;
nbrTitres=dataXML.children().length();

var Menu_tabl:Array = new Array();


for(var i:uint=0;i<nbrTitres;i++)

{
//formatage texte
var formatMenu:TextFormat = new TextFormat();
    formatMenu.font="Tahoma";
    formatMenu.bold=false;
formatMenu.size = 24;
formatMenu.letterSpacing = 3;
formatMenu.color=0xFFFFFA;

var Menu_texte:TextField=new TextField();
var Menu_bouton:MovieClip=new MovieClip();

//Menu_texte.height=40;
//Menu_texte.width=70;
Menu_texte.x=-25 + 225 *(i+1);
Menu_texte.y=0;
Menu_texte.selectable=false;
Menu_texte.autoSize = TextFieldAutoSize.LEFT;
Menu_texte.defaultTextFormat = formatMenu;
Menu_texte.text=dataXML.Menu[i].@nom;
//Nommage des menus
Menu_bouton.name =String(i+1);
// je rempli le tableau de nom


Menu_bouton.addChild(Menu_texte);
Bandeau.addChildAt(Menu_bouton,2);

Menu_tabl.push(Menu_bouton.name);

}

//Tween acceuil
stage.addEventListener(MouseEvent.MOUSE_OVER, plac_acc_logo);

function plac_acc_logo(evt:Event) {

TweenMax.to(Logo, 1, {x:485.5,y:95, ease:Back.easeOut});
TweenMax.to(Bandeau, 2, {x:-83 ,y:446, ease:Back.easeOut});

}
// Ecouteur Menu

Menu_bouton.addEventListener(MouseEvent.MOUSE_DOWN, click_menu);
function click_menu(evt:Event) {


var Menu_bouton_nom:int = Menu_tabl.indexOf(evt.currentTarget);
trace (evt.currentTarget + "et le tabl retourne" + Menu_bouton_nom);
trace(Menu_bouton.name);

}




//Menu_tabl.push(dataXML.Menu.@numero);


}


Merci de ton aide
0

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

Posez votre question
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
11 mars 2011 à 16:20
normal aussi, puisque tu places les noms de tes boutons dans le tableau .. pourquoi ne places-tu pas directement les boutons dans ce tableau ?

Peg'
0
cs_fraktal Messages postés 7 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 15 mars 2011
11 mars 2011 à 16:29
En effet >< du coup le tableau me retourne maintenant la bonne valeur mais le seul bouton fonctionnel reste le dernier :/ et la dessus je pense que soit c'est une variable créé au mauvais endroit mais je ne voie pas, je créé mes boutons dans la boucle, mon tableau avant le boucle

Ou alors ce la viens du l'imbrication de mon texte dans un movieClip mais le dernier fonctionne donc logiquement c'est tout bon ...

Merci
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
11 mars 2011 à 16:37
c'est parce que tu as placé ton écouteur en dehors de ta boucle. Il faut que tu places un écouteur sur chaque bouton, et pas juste sur le dernier créé.

Peg'
0
cs_fraktal Messages postés 7 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 15 mars 2011
11 mars 2011 à 16:52
Yes ,

J'aurais y penser V___V" mais bon les reflexes de code c'est dur à entrer

du coup le tableau me retourne les bonne valeur pour tous les boutons, les écouteur fonctionne sur tout les boutons mais il renvoient tous vers le meme objet ( le dernier) je vais essayer de les différencier avec une autre variable ou alr avec un switch enfin je ne sais pas trop . En tout cas merci pour ton aide précieuse.
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
11 mars 2011 à 16:59
on est là pour ça ;)

Peg'
0
cs_fraktal Messages postés 7 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 15 mars 2011
15 mars 2011 à 12:45
Bon,

Peg' je suis désolé de t'embeter, mais je n'arrive pas a comprendre comment cibler un movie Clip qui est enoncé dans une boucle, en effet ils portent tous le meme nom .
à l'aide du tableau je comprend bien qu'on peut savoir sur quel bouton on clique ( en fonction de sa position dans le tableau)
Mais à quoi comparer cette valeur ?
j'ai essayé de tester entre le .name du bouton que je défini dans la boucle for ( donc du type "truc" + i) mais tous les bouton obtiennent le meme nom, la derniere valeur de i.
Et le getChildByName je ne comprend pas quel genre de donné il renvoie, ca ne correspond pas au nom de l'occurence ni au nom de la liste d'affichage ....

En tout ca je te remercie
0
cs_fraktal Messages postés 7 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 15 mars 2011
15 mars 2011 à 14:27
Okkayyy

j'ai capté, au lieu d'appler un bouton, on appelle le bouton placé dans le tableau qu'on à généré, c'est logique.
0
Rejoignez-nous