Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash
Flash Forum d'entraide sur la technologie Flash (Cours, FAQs, Sources)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/01/2012, 19h25   #1
Invité régulier
 
Homme Stéphane
Enseignant
Inscription : décembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 5
Points : 7
Points : 7
Par défaut 2 occurrences d'un même clip contenant un bouton doivent appeler la même fonction lors du clic sur le bouton

Bonjour

Je suis en train de programmer un panoramique sous CS4 Pro en utilisant un scrolling de deux occurrences identiques d'un même clip placées côte à côte.
Dans ce clip, il y a un bouton qui doit déclencher une fonction située à la racine de l'animation.

Appelons le clip mc_test.
Le nom du bouton est entré directement sur le clip à partir de l'interface en "nom de l'occurrence". Appelons btn_clip ce bouton.

Sur la racine de l'animation. Je crée deux instances du clip et pour appeler la fonction à partir du clip, je crée un évènement perso.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
var mc_test1:mc_test = new mc_test();
this.addChild(mc_test1); //Première instance du clip
 
var mc_test2:mc_test = new mc_test();
this.addChild(mc_test2); //Deuxième instance du clip
 
mc_test1.addEventListener("Event_Perso",ma_fonction); //J'appelle la même fonction à partir de chaque clip en écoutant mon évènement perso
mc_test2.addEventListener("Event_Perso",ma_fonction);
 
function ma_fonction(event:Event):void{ //C'est la fonction qui doit être lancée à partir du bouton du clip
bla-bla-bla...
}

Et dans le clip, j'ajoute

Code :
1
2
3
4
5
btn_clip.addEventListener(MouseEvent.CLICK, fction_nouvel_evenement);
 
function fction_nouvel_evenement(event:MouseEvent):void {
	this.dispatchEvent(new Event("Event_Perso"));
}
Mon problème est que seul le bouton d'un seul clip déclenche la fonction ma_fonction.

J'ai fait un trace à la racine du clip pour faire apparaître les childs. Le bouton apparait bien mais qu'une seule fois alors qu'il devrait apparaître pour chaque clip chargé.

Je précise aussi que les deux clips se chargent bien car mon scrolling fonctionne.

Merci d'avance pour votre aide éclairée.
slorre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 23h13   #2
Invité régulier
 
Homme Stéphane
Enseignant
Inscription : décembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 5
Points : 7
Points : 7
Bonsoir

Je me réponds à moi-même.

Je viens de modifier mon approche. J'ai placé mon écouteur d'évènement MouseEvent.CLICK dans le parent de mes deux clips.
Avec un trace(event.target), je peux voir que mes deux copies du même bouton déclenchent bien l’évènement et donc me permettent de lancer ma fonction.

Seulement, j'ai plusieurs boutons dans ce clip (qui sont donc eux aussi doublés). Un bouton btn_clip_1 et un autre btn_clip_2. Ma question est comment faire pour les différencier dans la fonction afin de lancer d'autres fonctions selon le bouton.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var mc_test1:mc_test = new mc_test();
this.addChild(mc_test1); //Première instance du clip
 
var mc_test2:mc_test = new mc_test();
this.addChild(mc_test2); //Deuxième instance du clip
 
this.addEventListener(MouseEvent.CLICK,ma_fonction); //J'écoute tous les évènements CLICK de la souris y compris dans les children c'est à dire mes deux clip mc_clip
 
function ma_fonction(event:MouseEvent):void {
 
	var objet_cliqué:DisplayObject=event.target as DisplayObject; //Je récupère l'objet qui a déclenché l'évènement
 
	trace( objet_cliqué ); // Je vérifie que le nom du bouton est bien récupéré
	// Comment faire pour différencier btn_clip_1 de btn_clip_2 à ce niveau?
}
En sortie j'obtiens [object btn_clip_1] ou [object btn_clip_2] selon que je clique sur l'une ou l'autre des instances des deux boutons.

Et pour finir, dans mon clip mc_test, je n'ai plus de code.

Merci d'avance pour vos propositions.
slorre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/01/2012, 12h33   #3
Invité régulier
 
Homme Stéphane
Enseignant
Inscription : décembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 5
Points : 7
Points : 7
Bonjour

Je me réponds encore une fois à moi-même puisque personne ne veut m'aider.

J'ai donné un nom à chaque bouton en dur sur l'interface.
Il ne me reste qu'à tester le nom avec

Code :
1
2
3
if (event.name=="nom_du_bouton") {
 bla-bla-bla...
}
Et cela fonctionne.
Les pros d'Action Script 3 veut surement penser que c'est du bricolage mais bon...
slorre est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h13.


 
 
 
 
Partenaires

Hébergement Web