Propagation d'un evenement personnalisé

riyuhou Messages postés 16 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 28 février 2011 - 22 janv. 2011 à 14:48
riyuhou Messages postés 16 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 28 février 2011 - 23 janv. 2011 à 20:57
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 occurence 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 :
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 :
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);
this.bt.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 :
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 reltivement 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.

14 réponses

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
22 janv. 2011 à 19:37
bonsoir.

Où as-tu instancié ta classe "dispatcher" exactement dans ta classe "Main" ?

Peg'
0
riyuhou Messages postés 16 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 28 février 2011
22 janv. 2011 à 20:11
Bonsoir Peg,

Je 'ai pas instancié ma classe "dispatch" dans le "Main" car j'en ai déjà une occurrence sur la scène qui s'appelle "dispatcher". (Dans la propriété du clip j'ai mis exporté pour actionscript, et j'ai mis classe : dispatch).

Je pensais que j'aurais eu à instancier ma class dispatch dans le Main, avec un truc genre :
private var unAutreDispatcher:dispatch = new dispatch(); 
addChild(unAutreDispatcher);



seulement si je n'avais pas déjà une occurrence de cette classe sur la scène de base.

Est une erreur de ma part ?
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
22 janv. 2011 à 20:14
je ne sais pas, je n'ai jamais eut le cas ...
Mais ta classe Main, tu l'as associée à ton animation dans les paramètres d'export, exact ?

Peg'
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
22 janv. 2011 à 20:15
Ah, encore un truc : comment es-tu arrivé à instancier une classe donc le code était déjà implémenté avec un package ?!

Peg'
0

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

Posez votre question
riyuhou Messages postés 16 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 28 février 2011
22 janv. 2011 à 20:25
Alors pour la première question, j'ai associé la class Main à mon fla, juste en écrivant "Main" dans le panneau "classe" des propriétés.(donc je suppose que la réponse est oui)

Pour la deuxième question...pour être honnête je la comprend pas très bien (oui je débute en As3).
Mais de ce que j'ai cru comprendre, dans ma bibliothèque, si dans les propriété d'un clip, je met "exporter pour actionscript", avec le nom d'une classe.
Bah le clip en question devient comme une occurrence de ma classe.
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
22 janv. 2011 à 20:29
pour la première, on est ok ..
ensuite pour la seconde, ce que tu as fait n'est que créer un clip de type "MovieClip" que tu peux appeller et instancier dans ton code actionscript avec "new Dispatcher()", rien de plus.

Mais ton code de la classe "Dispatcher", il est où ?
0
riyuhou Messages postés 16 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 28 février 2011
22 janv. 2011 à 20:34
Bah il n'y a pas de classe dispatcher.
dispatcher n'est que le nom de l'occurrence que j'ai déposé sur la scène (qui est aussi le nom du clip d'origine).
0
riyuhou Messages postés 16 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 28 février 2011
22 janv. 2011 à 20:35
et merci pour l'explication de l'export action Script", je pensais que ça servait "en gros" à "linker" d'autre fichier .as que le main à l'animation.
0
riyuhou Messages postés 16 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 28 février 2011
22 janv. 2011 à 20:42
Bon, si tu as un peu de temps, je pense que le plus simple est que tu regardes un peu comment je m'y suis pris :

Sources
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
22 janv. 2011 à 20:45
si tu veux importer une classe externe, il faut passer via "import MaClasse", où le nom du package correspond au chemin du fichier AS et le nom de classe à celui que tu importes.

Peg'
0
riyuhou Messages postés 16 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 28 février 2011
22 janv. 2011 à 21:05
Merci pour l'info.
Mais malheureusement le problème ne vient pas de la vue que dans ma sortie, j'ai le trace que je fais dans ma classe dispatch. c'est donc qu'elle est bien lié à l'animation.

je sais pas si tu as vu que j'avais mis les sources : Source
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
22 janv. 2011 à 23:10
Ben ce WE, je suis en mode "graphiste", donc peu de temps à t'accorder pour ce qui est "pratique" .. mais je verrais à y jeter un z'oeil dés que j'ai 5 min.

Peg'
0
riyuhou Messages postés 16 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 28 février 2011
23 janv. 2011 à 15:24
Merci beaucoup.
0
riyuhou Messages postés 16 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 28 février 2011
23 janv. 2011 à 20:57
Problème résolue : une simple erreur de syntaxe(un "r" oublié).
Merci quand même d'avoir passé du temps sur mon problème.
0
Rejoignez-nous