Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS1/AS2
AS1/AS2 Questions relatives à la programmation ActionScript 1 et 2 (Cours AS2)
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 16/12/2004, 19h07   #1
Rédactrice
 
Avatar de bolo
 
Inscription : novembre 2002
Messages : 1 309
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 1 309
Points : 1 934
Points : 1 934
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 :
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 :
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 :
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
__________________
Flex/RoR Consulting
bolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2004, 23h42   #2
Rédacteur
 
Avatar de freegreg
 
Inscription : août 2002
Messages : 4 395
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2002
Messages : 4 395
Points : 5 227
Points : 5 227
Re,

tu es sûre que ton code marche dans une animation???
Moi j'aurais mis:
Code :
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 :
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
Vous voulez partager des ressources concernant les technologies ci-dessus : contactez-moi
freegreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2004, 14h18   #3
Rédactrice
 
Avatar de bolo
 
Inscription : novembre 2002
Messages : 1 309
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 1 309
Points : 1 934
Points : 1 934
d'apres tes indications j'ai modifié la classe
Code :
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 :
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é
__________________
Flex/RoR Consulting
bolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2004, 15h24   #4
Rédacteur
 
Avatar de freegreg
 
Inscription : août 2002
Messages : 4 395
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2002
Messages : 4 395
Points : 5 227
Points : 5 227
Je ne sais pas trop pourquoi

si tu fais ça ?

Code :
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 :
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 :
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 :
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
Vous voulez partager des ressources concernant les technologies ci-dessus : contactez-moi
freegreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2004, 15h59   #5
Rédactrice
 
Avatar de bolo
 
Inscription : novembre 2002
Messages : 1 309
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 1 309
Points : 1 934
Points : 1 934
si je fais ainsi
Code :
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
__________________
Flex/RoR Consulting
bolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2004, 16h20   #6
Rédacteur
 
Avatar de freegreg
 
Inscription : août 2002
Messages : 4 395
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2002
Messages : 4 395
Points : 5 227
Points : 5 227
Citation:
Envoyé par bolo
si je fais ainsi
Code :
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
Vous voulez partager des ressources concernant les technologies ci-dessus : contactez-moi
freegreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2004, 16h27   #7
Rédactrice
 
Avatar de bolo
 
Inscription : novembre 2002
Messages : 1 309
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 1 309
Points : 1 934
Points : 1 934
ok

normalement le this n'est pas sous entendu ?

j'ai essayé j'ai cette
Citation:
**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
__________________
Flex/RoR Consulting
bolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2004, 02h44   #8
Rédactrice
 
Avatar de bolo
 
Inscription : novembre 2002
Messages : 1 309
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 1 309
Points : 1 934
Points : 1 934
bon ben je remonte mon post ou ca qqn aurais une idéee
__________________
Flex/RoR Consulting
bolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2004, 08h58   #9
Rédacteur
 
Avatar de freegreg
 
Inscription : août 2002
Messages : 4 395
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2002
Messages : 4 395
Points : 5 227
Points : 5 227
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
Vous voulez partager des ressources concernant les technologies ci-dessus : contactez-moi
freegreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2004, 14h21   #10
Rédactrice
 
Avatar de bolo
 
Inscription : novembre 2002
Messages : 1 309
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 1 309
Points : 1 934
Points : 1 934
c'etait pour creer une fonction Redim sans devoir creer un nouvel objet Resize
__________________
Flex/RoR Consulting
bolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2004, 14h49   #11
Rédacteur
 
Avatar de freegreg
 
Inscription : août 2002
Messages : 4 395
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2002
Messages : 4 395
Points : 5 227
Points : 5 227
Citation:
Envoyé par bolo
dans mon animation
Code :
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 :
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
Vous voulez partager des ressources concernant les technologies ci-dessus : contactez-moi
freegreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2004, 15h10   #12
Rédactrice
 
Avatar de bolo
 
Inscription : novembre 2002
Messages : 1 309
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 1 309
Points : 1 934
Points : 1 934
en fait si j'utilise un ecouteur je ne peux creer de méthodes static
__________________
Flex/RoR Consulting
bolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2004, 16h18   #13
Rédacteur
 
Avatar de freegreg
 
Inscription : août 2002
Messages : 4 395
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2002
Messages : 4 395
Points : 5 227
Points : 5 227
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
Vous voulez partager des ressources concernant les technologies ci-dessus : contactez-moi
freegreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2004, 13h59   #14
Rédactrice
 
Avatar de bolo
 
Inscription : novembre 2002
Messages : 1 309
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 1 309
Points : 1 934
Points : 1 934
bon maintenant que ma méthode n'est plus statique je n'arrive plus a dispacher un évenemen

Code :
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
__________________
Flex/RoR Consulting
bolo 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 17h59.


 
 
 
 
Partenaires

Hébergement Web