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 22/01/2011, 18h41   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 4
Points : 0
Points : 0
Par défaut Propagation d'un evenement personnalisé

Bonjour à tous,
bon après avoir passer la journée d'hier, et la mâtiné à lire de la doc, je dois me rendre à l'évidence, je comprend rien à la façon dont se propage un évènement lancé avec un dispatchEvent();.

j'ai pourtant simplifier mon problème au maximum, mais rien à faire, je n'arrive pas à écouter mes évènement perso.

Voici une simplification extrême de mon problème.
Sur la scène je place :
- Une occurrence d'un clip "dispatcher" qui contient
=> Une occurrence de clip appeler bt.
- Une occurrence d'un autre clip (vide) appelé mcContainer

Je possède deux classes, une appelé Main :

Code Main :
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
package {
	import flash.display.*;
	import flash.events.*;
 
 
 
	public class Main extends MovieClip {
 
		public function Main() {
			dispatcher.addEventListener("chargerEditTv", editTvHandler);
			dispatcher.bt.addEventListener("chargerEditTv", editTvHandler);
			mcContainer.addEventListener("chargerEditTv", editTvHandler);
			this.addEventListener("chargerEditTv", editTvHandler);
			trace("ok");
 
 
		}
		private function editTvHandler(e:Event):void {
			trace("L'editeur Tv est en cours de chargement");
		}
 
	}
 
 
}



qui a pour but de lancer tous les actions "principales" en écoutant les évenements lancé par les clas périphérique.
Comme vous pouvez le constater, dans ma classe Main, j'ai ici mis un écouteur sur tous les éléments de ma page pour essayer de comprendre comment se propageait mon évènement personnalisé, mais rien à faire...aucun élément présent sur ma scène ne semble l'entendre.

Une autre class appelé dispatch :

Code dispatch :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package {
	import flash.display.*;
	import flash.events.*;
 
 
	public class dispatch extends MovieClip {
 
		public function dispatch() {
			bt.addEventListener(MouseEvent.CLICK, pageBouquet);
			trace("oi");
 
		}
		private function pageBouquet(e:MouseEvent):void {
			trace("Cette page est une page bouquet");
			var evt:Event = new Event ("chargeEditTv", true);
			dispatchEvent(evt); 
			trace(evt);
 
		}
		//class
 
	}
}


Qui comme son nom l'indique, doit dispatcher mes évènements perso.
Sur le fichier Fla, j'ai défini la classe comme étant "Main", et exporter le clip dispatcher pour action script, avec pour nom de classe dispatch.


Voici ce que je récup en sortie :

Citation:
Envoyé par sortie_des_trace
oi => (trace dans le constructeur de dispatch)
ok => (trace dans le constructeur de Main)
Cette page est une page bouquet => (trace lancé par l'évènement CLICK)
[Event type="chargeEditTv" bubbles=true cancelable=false eventPhase=2]
=> (trace lancé par l'évènement CLICK)


je suis relativement agacé car je suis sur que c'est une notion ultra simple que je comprend pas ou que j'oublie...c'est frustrant.
si qq'un pouvait éclairer ma lanterne, je lui en serait reconnaissant.

Merci.
ryuhou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2011, 23h26   #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,

as tu lu le tuto de Thibault Imbert ici ?
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2011, 12h51   #3
Membre éprouvé
 
Avatar de IP-Fix
 
Inscription : mars 2006
Messages : 406
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 406
Points : 433
Points : 433
Envoyer un message via MSN à IP-Fix
L erreur viens que tu le met ton evenement personnalise en bubble ( ce qui est d ailleurs une bonne idee dans ton cas )

quand tu le bubble il est pas associe a l objet mais remonte comme une bulle de clip en clip jusqu a etre intercepte de cette maniere :

Code :
addEventListener(Event.Complete, onComplete, true)
dans ton cas :

Code :
1
2
3
public function Main() {
    addEventListener("chargerEditTv", editTvHandler, true);
}
sinon tu met le bubbling a false et sa devrais marche aussi =)
__________________
Mon nouveau blog : Flash-Dungeon : AS3 / Objectif-C
IP-Fix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/01/2011, 16h50   #4
Invité de passage
 
Inscription : janvier 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 4
Points : 0
Points : 0
Bonjour,

@Madfrix :
non je n'avais pas lu le tuto, seulement les doc adobe, et qq sujet forum sur le sujet. J'ai lu la doc la nuit dernière, et malheureusement je trouve toujours pas le souci.

Dans la doc, j'ai d'ailleurs vu une petite astuce qui m'a aidé à identifié le problème plus précisément.

Quand je fais mon dispatchevent, et que je fais un trace de target, currentTarget et type, il me met les deux premier à "null", alors que je m'attendais à ce qu'il me mette "[Object Dispatch].

@Ip-Fix :
Merci d'avoir pris le temps de te pencher sur mon problème, malheureusement, le problème de vient pas du bubble.
En fait à la base je changeais pas le bubble, j'ai fini par le mettre à true juste pour voir si l'erreur venait de la.
ryuhou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2011, 17h48   #5
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,

prend l'habitude de toujours nommer tes classes en notation conventionnelle camel-case (UneClasse, UneAutreClasse...)

Ici donc Dispatch et pas dispatch.

Ensuite, je pense que tu as pas mis tout ton code mais sait on jamais...insères tu bien tes éléments sur la scene avec addChild ?

Dernière précision, évites les joker * si possible pour les imports, c'est certes plus rapide et simple mais cela nui aux performances
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/01/2011, 18h59   #6
Invité de passage
 
Inscription : janvier 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 4
Points : 0
Points : 0
oui, j'ai corrigé pour le nomenclature de la classe Dispatch.
je sais même pas pourquoi j'avais mis une minuscule à l'origine.

Sinon, je n'insère pas mes éléments sur la scène via addchild() car ils sont déjà sur la scène à l'origine.
ryuhou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2011, 19h03   #7
Membre éprouvé
 
Avatar de IP-Fix
 
Inscription : mars 2006
Messages : 406
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 406
Points : 433
Points : 433
Envoyer un message via MSN à IP-Fix
chargeEditTv

t a oublier un r

=>

chargerEditTv

passe par des constante static pour eviter ce probleme.
__________________
Mon nouveau blog : Flash-Dungeon : AS3 / Objectif-C
IP-Fix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/01/2011, 19h15   #8
Invité de passage
 
Inscription : janvier 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 4
Points : 0
Points : 0
Citation:
Envoyé par IP-Fix Voir le message
chargeEditTv

t a oublier un r

=>

chargerEditTv

passe par des constante static pour eviter ce probleme.
oooh pinaise, j'ai envie de pleurer.
j'ai passé 2 jours à lire doc sur doc à cause d'un "r" !!!
Enfin, j'aurais pas tout perdu, y avait des truc intéressants dans ma lecture du week en, notamment sur le tuto que m'a donné Madfrix. Et pis ça me servira de leçon.

Encore merci à toi et à Madfrix en tous cas, d'avoir pris un peu de temps pour m'aider.
ryuhou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h42.


 
 
 
 
Partenaires

Hébergement Web