Une seule fonction avec variables pour plusieurs boutons en AS3?

RAMEAUTL Messages postés 6 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 24 janvier 2010 - 6 nov. 2008 à 10:00
arne6 Messages postés 7 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 6 août 2013 - 6 août 2013 à 09:52
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

arne6 Messages postés 7 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 6 août 2013
7 nov. 2008 à 15:36
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);
}

}
0
merci bcp arne6 , tu m'a sauvé la vie depuis l'autre bout du monde :) , keep it up !!
0
arne6 Messages postés 7 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 6 août 2013
6 août 2013 à 09:52
de rien! 5 ans après ça sert toujours...
t'es où?
0
RAMEAUTL Messages postés 6 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 24 janvier 2010
7 nov. 2008 à 16:30
Ca marche et en plus je comprends pourquoi!
Merci pour cette précieuse aide arne6.
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
7 nov. 2008 à 16:43
Petite précision : e.currentTarget est plus efficace pour un ciblage direct et cela évite des erreurs à venir ;)

Peg'
0
arne6 Messages postés 7 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 6 août 2013
7 nov. 2008 à 17:18
exact!
0

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

Posez votre question
RAMEAUTL Messages postés 6 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 24 janvier 2010
8 nov. 2008 à 10:27
Excusez mon ignorance, mais qu'est-ce qu'un ciblage direct et comment cela ce traduit-il en code avec e.currentTarget?
Merci.
0
arne6 Messages postés 7 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 6 août 2013
8 nov. 2008 à 12:46
0
RAMEAUTL Messages postés 6 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 24 janvier 2010
8 nov. 2008 à 18:01
Un vrai bonheur. Merci à tous les deux de me faire progresser!
0
cs_Yode Messages postés 30 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 25 avril 2009
17 avril 2009 à 13:47
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 !
0
arne6 Messages postés 7 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 6 août 2013
17 avril 2009 à 14:19
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
0
cs_Yode Messages postés 30 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 25 avril 2009
17 avril 2009 à 15:15
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.
0
arne6 Messages postés 7 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 6 août 2013
17 avril 2009 à 15:25
ptêtre que t'as vu ça en as2:

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

mais en as3 , je vois pas...
0
Rejoignez-nous