riyuhou
Messages postés16Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention28 février 2011
-
22 janv. 2011 à 14:48
riyuhou
Messages postés16Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention28 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.
riyuhou
Messages postés16Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention28 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.
riyuhou
Messages postés16Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention28 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.
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 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ù ?
riyuhou
Messages postés16Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention28 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).
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 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.
riyuhou
Messages postés16Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention28 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
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 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.