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 1 & ActionScript 2 Discussion :

[FLASH MX2004] [AS2] EventDispatcher


Sujet :

ActionScript 1 & ActionScript 2

  1. #1
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut [FLASH MX2004] [AS2] EventDispatcher
    Salut

    je suis en train d'essayer de comprendre cette classe EventDispatcher
    pour cela j'ai cree une extension de la classe Tween
    Code : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    class i_Effets.SuperTween extends Tween  {
     
    	private static var __initEvent = EventDispatcher.initialize(SuperTween.prototype);
     
    	private var dispatchEvent:Function;
    	public var addEventListener:Function;
    	public var removeEventListener:Function;
     
    	//---Constructor
    	public function SuperTween (obj:Object, prop:String, func:Function, begin:Number, finish:Number, duration:Number, useSeconds:Number)
    	{
    		super(obj, prop, func, begin, finish, duration, useSeconds);
    	}
     
    	//---- Private méthodes
    	private function onMotionStarted(tw:Tween):Void {
    		dispatchEvent({type:"onMotionStarted", target:tw});
    	}
     
    	private function onMotionLooped(tw:Tween):Void {
    		dispatchEvent({type:"onMotionLooped", target:tw});
    	}
     
    	private function onMotionFinished(tw:Tween):Void {
    		dispatchEvent({type:"onMotionFinished", target:tw});
    	}
     
    	private function onMotionChanged(tw:Tween, pos:Number):Void {
    		dispatchEvent({type:"onMotionChanged", target:tw, position:pos});
    	}
     
    	private function onMotionStopped(tw:Tween):Void {
    		dispatchEvent({type:"onMotionStopped", target:tw});
    	}
     
    	private function onMotionResumed(tw:Tween):Void {
    		dispatchEvent({type:"onMotionResumed", target:tw});
    	}
     
    }
    je cree une autre classe
    Code : 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
     
    class i_Effets.Resize {
     
    	//--- private
    	private var ResizeEnd_x:Object=new Object();
     
    	//---Construtor
    	public function Resize(Void){}
    	//---- Public méthodes
    	public static function Redim (mc:MovieClip,speed:Number,w:Number,h:Number):Void
    	{
    		var twx:SuperTween = new SuperTween(mc, "_width", Back.easeOut, 100, 300, 32);
    		twx.addEventListener("onMotionFinished",ResizeEnd_x);
    	}
     
    	private function ResizeEnd_x.onMotionFinished (e:Object):Void{
    		}
     
    }
    mais ca ne fonctionne pas

    si je teste hors d'une classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var ecouteur:Object = new Object ();
    tw.addEventListener("ecouteur", listen);
    ecouteur.onMotionFinished = function(e:Object) {
       trace("terminé");
    }
    dans une animation ca fonctionne mais comment mettre ca dans une autre classe


    merci

  2. #2
    Expert éminent

    Avatar de freegreg
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2002
    Messages : 4 376
    Points : 8 779
    Points
    8 779
    Par défaut
    Re,

    tu es sûre que ton code marche dans une animation???
    Moi j'aurais mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var ecouteur:Object = new Object();
    ecouteur.onMotionFinished = function(e:Object){
      trace("terminé");
    }
    tw.addEventListener("onMotionFinished ", ecouteur) ;
    Sinon c'est bizarre comme nom de fonction ResizeEnd_x.onMotionFinished!
    Moi je ferai plutôt :
    Code : 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
    class i_Effets.Resize { 
       //---Construtor 
       public function Resize(Void){} 
       //---- Public méthodes 
       public static function Redim (mc:MovieClip,speed:Number,w:Number,h:Number):Void 
       { 
          var twx:SuperTween = new SuperTween(mc, "_width", Back.easeOut, 100, 300, 32); 
     
          var ResizeEnd_x:Object=new Object(); 
          ResizeEnd_x.onMotionFinished = function(e:Object){
                trace("Terminé");
          }
     
          twx.addEventListener("onMotionFinished",ResizeEnd_x); 
       } 
    }
    Avant toutes questions, consultez nos différentes ressources disponibles gratuitement : XML, Développement Web, Flash/Flex, (X)HTML, CSS, JavaScript, AJAX, ASP
    Offres d'emploi développeur Web

  3. #3
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    d'apres tes indications j'ai modifié la classe
    Code : 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
    26
    27
    28
    29
    30
    class i_Effets.Resize {
     
    	//---Private proprietee
    	private static var __initEvent = EventDispatcher.initialize(Resize.prototype);
    	//Public propriette
     
    	private var dispatchEvent:Function;
    	public var addEventListener:Function;
     
    	public var removeEventListener:Function;
    	//---Construtor
    	public function Resize(Void){}
    		//---- Public méthodes
    	public static function Redim (mc:MovieClip,speed:Number,w:Number,h:Number):Void
    		{
    			var ResizeEnd_W:Object=new Object();
    			var ResizeEnd_H:Object=new Object();
    			var End_H:Boolean=false;
    			var End_W:Boolean=false;
    			//----------
    			var twH:SuperTween = new SuperTween(mc, "_height", Back.easeOut,mc._height,h,speed);
    			var twW:SuperTween = new SuperTween(mc, "_width", Back.easeOut,mc._width,w,speed);
    			//----------
    			ResizeEnd_W.onMotionFinished = function(e:Object){End_W=true;if(End_H==true)dispatchEvent({type:"ResizeEnd",target:this});}
    			ResizeEnd_H.onMotionFinished = function(e:Object){End_H=true;if(End_W==true)trace("ok");dispatchEvent({type:"ResizeEnd",target:this});}
    			//--------
    			twH.addEventListener("onMotionFinished",ResizeEnd_W);
    			twW.addEventListener("onMotionFinished",ResizeEnd_H);
    		}
    }
    dans mon animation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var t:Resize= new Resize();
    Resize.Redim(rectangle,30,100,100)
    t.addEventListener("ResizeEnd",this) ;
    function ResizeEnd(e:Object):Void{
    	trace("Terminé");
    }
    mais je n'ai jamais terminé

  4. #4
    Expert éminent

    Avatar de freegreg
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2002
    Messages : 4 376
    Points : 8 779
    Points
    8 779
    Par défaut
    Je ne sais pas trop pourquoi

    si tu fais ça ?

    Code : 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
    class i_Effets.Resize { 
     
       //---Private proprietee 
       private static var __initEvent = EventDispatcher.initialize(Resize.prototype); 
       //Public propriette 
     
       private var dispatchEvent:Function; 
       public var addEventListener:Function; 
     
       public var removeEventListener:Function; 
       //---Construtor 
       public function Resize(Void){} 
          //---- Public méthodes 
       public static function Redim (mc:MovieClip,speed:Number,w:Number,h:Number):Void 
          { 
             this.dispatchEvent({type:"ResizeEnd",target:this});} 
          } 
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var t:Resize= new Resize(); 
    Resize.Redim(rectangle,30,100,100) 
    t.addEventListener("ResizeEnd",this) ; 
    function ResizeEnd(e:Object):Void{ 
       trace("Terminé"); 
    }
    Est-ce que tu obtiens le terminé?

    Est-ce que cela ne serait pas ton target qui n'est pas bon?
    Essaie avec _parent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ResizeEnd_H.onMotionFinished = function(e:Object){End_H=true;if(End_W==true) _parent.dispatchEvent({type:"ResizeEnd",target:_parent});} 
    ...
    Ps :
    Citation Envoyé par bolo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ResizeEnd_H.onMotionFinished = function(e:Object){End_H=true;if(End_W==true)trace("ok");dispatchEvent({type:"ResizeEnd",target:this});}
    Tu as dû oublié soit les accolades, soit de supprimer le trace("ok") ton dispatchevent n'est pas dans ton if
    Avant toutes questions, consultez nos différentes ressources disponibles gratuitement : XML, Développement Web, Flash/Flex, (X)HTML, CSS, JavaScript, AJAX, ASP
    Offres d'emploi développeur Web

  5. #5
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    si je fais ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static function Redim (mc:MovieClip,speed:Number,w:Number,h:Number):Void
          {
             this.dispatchEvent({type:"ResizeEnd",target:this});}
          }
    je ne suis pas sur que le motion est terminé car il y en a deux non

  6. #6
    Expert éminent

    Avatar de freegreg
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2002
    Messages : 4 376
    Points : 8 779
    Points
    8 779
    Par défaut
    Citation Envoyé par bolo
    si je fais ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static function Redim (mc:MovieClip,speed:Number,w:Number,h:Number):Void
          {
             this.dispatchEvent({type:"ResizeEnd",target:this});}
          }
    je ne suis pas sur que le motion est terminé car il y en a deux non
    Je sais (j'aurais dû préciser ).
    C'était juste pour voir s'il l'affichait, si le pb était déjà présent à ce niveau, ou si c'est le fait que ce soit dans les motions (Peut-etre avec le _parent?)
    Avant toutes questions, consultez nos différentes ressources disponibles gratuitement : XML, Développement Web, Flash/Flex, (X)HTML, CSS, JavaScript, AJAX, ASP
    Offres d'emploi développeur Web

  7. #7
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    ok

    normalement le this n'est pas sous entendu ?

    j'ai essayé j'ai cette
    **Error** D:\Bolo\creation\I_classe\i_Effets\Resize.as: Line 38: Instance variables cannot be accessed in static functions.
    dispatchEvent({type:"ResizeEnd",target:this});

    Total ActionScript Errors: 1 Reported Errors: 1
    la fonction static pose un problem

  8. #8
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    bon ben je remonte mon post ou ca qqn aurais une idéee

  9. #9
    Expert éminent

    Avatar de freegreg
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2002
    Messages : 4 376
    Points : 8 779
    Points
    8 779
    Par défaut
    T'as bien fait, je l'avais pas vu
    Le pb, c'est que si ta méthode est statique, je ne sais pas sur quoi pointe ton this!
    Pourquoi la mettre en static??
    Avant toutes questions, consultez nos différentes ressources disponibles gratuitement : XML, Développement Web, Flash/Flex, (X)HTML, CSS, JavaScript, AJAX, ASP
    Offres d'emploi développeur Web

  10. #10
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    c'etait pour creer une fonction Redim sans devoir creer un nouvel objet Resize

  11. #11
    Expert éminent

    Avatar de freegreg
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2002
    Messages : 4 376
    Points : 8 779
    Points
    8 779
    Par défaut
    Citation Envoyé par bolo
    dans mon animation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var t:Resize= new Resize();
    Resize.Redim(rectangle,30,100,100)
    t.addEventListener("ResizeEnd",this) ;
    function ResizeEnd(e:Object):Void{
    	trace("Terminé");
    }
    Ton objet Resize est déjà créé, non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var t:Resize= new Resize();
    t.addEventListener("ResizeEnd",this);
    t.Redim(rectangle,30,100,100);
     
    function ResizeEnd(e:Object):Void{
    	trace("Terminé");
    }
    Avant toutes questions, consultez nos différentes ressources disponibles gratuitement : XML, Développement Web, Flash/Flex, (X)HTML, CSS, JavaScript, AJAX, ASP
    Offres d'emploi développeur Web

  12. #12
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    en fait si j'utilise un ecouteur je ne peux creer de méthodes static

  13. #13
    Expert éminent

    Avatar de freegreg
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2002
    Messages : 4 376
    Points : 8 779
    Points
    8 779
    Par défaut
    Citation Envoyé par bolo
    en fait si j'utilise un ecouteur je ne peux creer de méthodes static
    Non, je ne pense pas!
    Avant toutes questions, consultez nos différentes ressources disponibles gratuitement : XML, Développement Web, Flash/Flex, (X)HTML, CSS, JavaScript, AJAX, ASP
    Offres d'emploi développeur Web

  14. #14
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    bon maintenant que ma méthode n'est plus statique je n'arrive plus a dispacher un évenemen

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ResizeEnd_W.onMotionFinished = function(e:Object){End_W=true;if(End_H==true){dispatchEvent({type:"ResizeEnd",target:this});}}
    			ResizeEnd_H.onMotionFinished = function(e:Object){End_H=true;if(End_W==true){dispatchEvent({type:"ResizeEnd",target:this});}}
    un problème de ciblage

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

Discussions similaires

  1. [FLASH MX2004] [AS2] Rectangle
    Par bolo dans le forum ActionScript 1 & ActionScript 2
    Réponses: 5
    Dernier message: 07/01/2005, 18h30
  2. [FLASH MX2004] [AS2] Classe méthodes static
    Par bolo dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 16/12/2004, 18h26
  3. [FLASH MX2004][AS2] Composition
    Par bolo dans le forum Flash
    Réponses: 9
    Dernier message: 10/12/2004, 16h53
  4. [FLASH MX2004] [AS2] Surchage
    Par bolo dans le forum ActionScript 1 & ActionScript 2
    Réponses: 3
    Dernier message: 09/12/2004, 16h27
  5. [FLASH MX2004] [AS2] Dialogue entre 2 SWF- tellTarget ???
    Par Geilgestorm dans le forum ActionScript 1 & ActionScript 2
    Réponses: 11
    Dernier message: 24/10/2004, 22h07

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