Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
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 27/08/2011, 19h36   #1
Invité de passage
 
Inscription : mars 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 3
Points : 0
Points : 0
Par défaut Transmission de variable sur EventListener

Bonjour, je me permets de poster ici car n'ayant pas trouver de réponses sur google concernant mon problème j'espère avoir un peu plus de chances sur ce forum ^^

Je développe pour le plaisir un petit jeu en 3d iso, la création de la grille se passe sans problème, de même que la mise en place de tules sur la grille.

Mon soucis se situe plutôt dans le fait de savoir quelle tule a était cliquée... Pour chaque tule, j'ajoute un listener renvoyant sur une fonction générique pour tout les tules et servant juste à me dire quelle tule a était cliquée :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
if (grille_x.length > 0) {
	for (var i = 0; i < grille_x.length; i++) {
			this["tule"+i] = new img0000();
			addChild(this["tule"+i]);
			this["tule"+i].x = grille_x[i]-28;
			this["tule"+i].y = grille_y[i]-16;
			this["tule"+i].height = 32;
			this["tule"+i].width = 56; 
			this["tule"+i].addEventListener(MouseEvent.CLICK, function() {click_tule(i)});
	}
	trace("Listener chargé");
}
Code :
1
2
3
4
 
function click_tule(s:Number) {
	trace("Clic détecté sur : "+s);
}
grille_x et grille_y sont des tableaux déjà chargés contenant les positions fixe des tules.

Quand je clique sur une tule située n'importe où dans l'écran, la console de débug me dit : Clic détecté sur : 536. (A savoir le nombre total de tule affichées...)

Savez-vous d'où cela peut provenir et comment régler le problème pour obtenir enfin le n° du tule cliqué ?

Merci d'avance
yann68moh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2011, 09h50   #2
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bonjour,

pour faire ce genre de choses, tu ne dois pas gérer l'événement CLICK sur chaque tule (beaucoup trop consommateur) mais plutôt écouter un seul événement CLICK sur le parent des tules puis récupérer la référence du tule par la propriété target :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
addEventListener(MouseEvent.CLICK, handleClick);
 
if (grille_x.length > 0) {
	for (var i = 0; i < grille_x.length; i++) {
			this["tule"+i] = new img0000();
			addChild(this["tule"+i]);
			this["tule"+i].x = grille_x[i]-28;
			this["tule"+i].y = grille_y[i]-16;
			this["tule"+i].height = 32;
			this["tule"+i].width = 56; 
			this["tule"+i].id= "tule"+i; 
	}
	trace("Listener chargé");
}
 
protected function handleClick(e:MouseEvent):void
{
     var ref:Object = e.target;
 
     (if (ref is ici_le_type_de_ton_tule) == false)
          return;
 
     trace((ici_le_type_de_ton_tule)ref.id + "cliqué !");
}
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h25.


 
 
 
 
Partenaires

Hébergement Web