IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Propagation d'un evenement personnalisé


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Janvier 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2011
    Messages : 6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour,

    as tu lu le tuto de Thibault Imbert ici ?

  3. #3
    Membre chevronné Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    addEventListener(Event.Complete, onComplete, true)
    dans ton cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function Main() {
        addEventListener("chargerEditTv", editTvHandler, true);
    }
    sinon tu met le bubbling a false et sa devrais marche aussi =)

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Janvier 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2011
    Messages : 6
    Par défaut
    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.

  5. #5
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    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

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Janvier 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2011
    Messages : 6
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 16
    Dernier message: 04/09/2008, 01h54
  2. Déclencher un evenement personnalisé d'un ActiveX
    Par Dung-Tri dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/09/2008, 10h36
  3. Propagation d'un evenement comme une fuite
    Par le merou dans le forum Delphi
    Réponses: 1
    Dernier message: 19/06/2007, 18h01
  4. Bloquer la propagation d'un evenement
    Par roudoudouduo dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 03/04/2007, 18h52
  5. Stopper la propagation d'un evenement
    Par systemofaxav dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/06/2006, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo