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.
Pourquoi une boucle comme celle ci-dessous ne fonctionne pas.
{
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.
{
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
- Article suivant : Love Comes & Goes - Ben oui… - de Romancrew
- Article précédent : Balance du son avec mc Tween



