Une seule fonction avec variables pour plusieurs boutons en AS3?

Signaler
Messages postés
6
Date d'inscription
mardi 26 décembre 2006
Statut
Membre
Dernière intervention
24 janvier 2010
-
Messages postés
7
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
6 août 2013
-
Bonjour à toutes et à tous.
Je suis en train de passer d'AS2 à AS3 et je suis loin d'être un pro.
En AS2 j'utilisais une fonction avec variable pour lancer la lecture de la timeline à partir de différentes images.
C'est-à-dire plusieurs boutons appelant la même fonction, chaque bouton appelant la fonction avec une valeur différente pour la variable.

Voici un exemple:
Jouer = function(imageDepart){
    var imageDepart:Number;
    this.gotoAndPlay(imageDepart);
}
bouton1_btn.onPress = function(){
    Jouer(50);
}
bouton2_btn.onPress = function(){

    Jouer(100);

}
etc...
En AS3 je n'arrive qu'à faire ça:
function Jouer(evt:MouseEvent):void {
    gotoAndPlay(50);
    }
bouton1_btn.addEventListener(MouseEvent.CLICK,Jouer);
etc...

Ce qui m'oblige à créer une fonction pour chaque bouton. Là j'ai fait simple, mais si je fais une fonction à plusieurs variables, ça devient très lourd.
Merci pour votre aide

11 réponses

Messages postés
7
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
6 août 2013

tu peux récupérer le nom du bouton dans la fonction

function Jouer(e:Event):void {

var bouton=e.target.name;

if(bouton=="bouton1_btn"){
gotoAndPlay(50);
}else if(bouton=="bouton2_btn"){
gotoAndPlay(100);
}

}
merci bcp arne6 , tu m'a sauvé la vie depuis l'autre bout du monde :) , keep it up !!
Messages postés
7
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
6 août 2013

de rien! 5 ans après ça sert toujours...
t'es où?
Messages postés
6
Date d'inscription
mardi 26 décembre 2006
Statut
Membre
Dernière intervention
24 janvier 2010

Ca marche et en plus je comprends pourquoi!
Merci pour cette précieuse aide arne6.
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
8
Petite précision : e.currentTarget est plus efficace pour un ciblage direct et cela évite des erreurs à venir ;)

Peg'
Messages postés
7
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
6 août 2013

exact!
Messages postés
6
Date d'inscription
mardi 26 décembre 2006
Statut
Membre
Dernière intervention
24 janvier 2010

Excusez mon ignorance, mais qu'est-ce qu'un ciblage direct et comment cela ce traduit-il en code avec e.currentTarget?
Merci.
Messages postés
7
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
6 août 2013

Messages postés
6
Date d'inscription
mardi 26 décembre 2006
Statut
Membre
Dernière intervention
24 janvier 2010

Un vrai bonheur. Merci à tous les deux de me faire progresser!
Messages postés
30
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
25 avril 2009

Bonjour, je profite de ce topic pour poser une question en rapport :

Dans le cas où on a plusieurs boutons, on a donc vu comment rédiger une seule fonction qui repère quel bouton est cliqué et agit en conséquence. Mais y a-t-il moyen d'éviter d'avoir à écrire pour chacun :

bouton1_btn.addEventListener(MouseEvent.ROLL_OVER,rollover);
bouton1_btn.addEventListener(MouseEvent.ROLL_OUT,rollout);
bouton1_btn.addEventListener(MouseEvent.MOUSE_DOWN,Jouer);

et donc ainsi de suite :

bouton2_btn.addEventListener(MouseEvent.ROLL_OVER,rollover);

bouton2_btn.addEventListener(MouseEvent.ROLL_OUT,rollout);

bouton2_btn.addEventListener(MouseEvent.MOUSE_DOWN,Jouer);

bouton3_btn.addEventListener(MouseEvent.ROLL_OVER,rollover);
(...) etc etc...

Merci d'avance pour vos tips !
Messages postés
7
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
6 août 2013

salut
tu peux utiliser une boucle:
ici j'affect 5 clips sur ma scène : menu0,menu2,...,menu5;

function initMenu() {
for (var i=0; i<6; i++) {
var menuElt=this["menu"+i];
menuElt.mouseChildren=false;
menuElt.buttonMode=true;
menuElt.addEventListener(MouseEvent.MOUSE_DOWN,lanceSection);
menuElt.addEventListener(MouseEvent.ROLL_OVER,menuRollOver);
menuElt.addEventListener(MouseEvent.ROLL_OUT,menuRollOut);
}
}






arne
Messages postés
30
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
25 avril 2009

Merci bien pour la réponse. En effet, ça peut fonctionner avec une boucle. J'ai testé ton script sur mon anim', ça fonctionne très bien.

Cependant, je voulais savoir si il y a une syntaxe qui permette de faire genre :

[bouton_rouge],[bouton_vert],[bouton_rose].addEventListener(MouseEvent.ROLL_OVER,rollover);

Pour attribuer un même listener à différents objets, sans avoir à les nommer "[name]+i"

Il me semble avoir vu ça un jour sur un tuto ou dans un bouquin, et impossible de le retrouver.
Messages postés
7
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
6 août 2013

ptêtre que t'as vu ça en as2:

truc1_btn.onRollOver=truc2_btn.onRollOver=function(){}

mais en as3 , je vois pas...