Boucles for & onRelease, comment affecter des actions aux boutons contenus dans la boucle

1 octobre 2008 par Niums dans Action script

Vous faites une boucle dans laquelle vous ajoutez un onRelease sur plusieurs boutons, qui s’insécrémentent, et la malheur au moment de la publication : en cliquant sur un bouton celui-ci renvoie toujours sa dernière valeur.

L’exemple.

Pourquoi une boucle comme celle ci-dessous ne fonctionne pas.

La source

for(var i=0 ; i<10 ; i++)
{
trace(i);

this.attachMovie("bouton","bouton"+i,i);
this["bouton"+i].nombre.text = i;
this["bouton"+i]._x = 10 + i*60;
this["bouton"+i]._y = 50;

// création d’un champs de texte : createTextField("instanceName", depth, x, y, width, height);
this.createTextField("leMessage", this.getNextHighestDepth() , 10, 120, 300, 100);
leMessage.html = true;

this["bouton"+i].onRelease = function()
{
leMessage.htmlText = "bouton <b>"+ i + " </b>cliqué !";
trace("bouton "+ i + " cliqué !");
}
}
 

Si vous testé ce code, quel que soit le bouton cliqué, vous obtiendrez 10. En fait la boucle est déja finie avant que vous ne pressiez sur un bouton. i sera donc toujours égal à sa dernière valeur.

Pour régler ce problème il suffit d’ajouter un nouveau paramètre : un indice. Nous allons associer à chaque occurence, une variable intitulée combien qui va prendre comme valeur celle de i.

for(var i=0 ; i<10 ; i++)
{
trace(i);

this.attachMovie("bouton","bouton"+i,i);
this["bouton"+i].leNombre.text = i;
this["bouton"+i]._x = 10 + i*60;
this["bouton"+i]._y = 50;

// l indice
this["bouton"+i].nombre = i;

// création d’un champs de texte : createTextField("instanceName", depth, x, y, width, height);
this.createTextField("leMessage", this.getNextHighestDepth() , 10, 120, 300, 100);

this["bouton"+i].onRelease = function()
{
leMessage.htmlText = "bouton <b>"+ this.nombre + " </b>cliqué !";
trace("bouton "+ this.nombre + " cliqué !");
}
}

 

Ici i affichera le nombre sur lequel on a cliqué.

 

Continuez votre lecture avec



Articles similaires


Laisser un commentaire