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 25/07/2005, 11h09   #1
Membre à l'essai
 
Inscription : août 2004
Messages : 110
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : août 2004
Messages : 110
Points : 21
Points : 21
Par défaut [AS2] Ecouteur d'evenements

Est-il possible de créer un ecouteur d'evenements pour nimporte quoi en AS2, parce que j'ai vu que l'on peut en créer un pour un evenement du type clavier ou souris mais moi je voudrais qu'une fonction s'execute si lorsqu'une variable passe à un certains niveau. Est-ce possible?
ooyeah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2005, 14h35   #2
Nouveau Membre du Club
 
Inscription : novembre 2004
Messages : 25
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 25
Points : 25
Points : 25
Non ca ce n'est pas possible avec la technique des écouteurs. Pour néanmoins avoir ce genre de fonctionnalité, il ne faut pas utiliser des champs mais des propritétés avec get et set.

Exemple

Code :
1
2
3
4
5
 
class A
{
	var b : Number = 0;
}
Tu aimerais que si la valeur de b dépasse 20 alors il se passe quelque chose. Prenons
par exemple qu'il doit avoir un trace.

Code :
1
2
3
 
 
trace("Ca c'est trop");
Si ta classe est ecrite comme ca alors a part tester la variable après chaque affectation
dans ton code, tu auras de la peine.

Mauvais exemple :

Code :
1
2
3
4
5
6
7
8
9
10
 
function setB(val:Number):A
{
	var a1 : A = new A();
	a1.b = val;
	if(a1.b > 20)
		trace("Ca c'est trop");
 
	return A;
}
Ecrivons plutot la classe comme suit

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
 
class A
{
	private hb :Number = 0;  // Le champ qui contiendra la valeur
 
	//La propritété b
	public function set b(value:Number):Void 
	{
		hb = value;
		if(val>20)
			trace("Ca c'est trop");
	}
 
	public function get b():Number
	{
		return hb;
	}
}
L'exemple devient:

Code :
1
2
3
4
5
6
7
 
function setB(val:Number):A
{
	var a1 : A = new A();
	a1.b = val;   <----------- Appel implicitement function set b(val)... => affichage du trace si b > 20
	return A;
}

Avec cette methode tu centralises tout le mécanisme de modification d'un champ à un endroit.
asfez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2005, 11h41   #3
Membre éclairé
 
Avatar de titouille
 
Inscription : juin 2005
Messages : 342
Détails du profil
Informations personnelles :
Âge : 32
Localisation : Suisse

Informations forums :
Inscription : juin 2005
Messages : 342
Points : 311
Points : 311
Bien sur que c'est possible...

Mais pour celà, ta classe devra initialiser le EventDispatcher et utiliser ce dernier pour broadcaster des évenements en direction des écouteurs...

Fais quelques recherches sur EventDispatcher et ASBroadcaster, tu trouveras surement ton bonheur


a++
titouille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2005, 12h05   #4
Membre à l'essai
 
Inscription : août 2004
Messages : 110
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : août 2004
Messages : 110
Points : 21
Points : 21
J'ai trouver la solution avec la fonction watch , apparemment le ASBroadcaster n'a pas l'air d'etre actif ou du moins visisble en AS2
ooyeah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2005, 12h15   #5
Membre éclairé
 
Avatar de titouille
 
Inscription : juin 2005
Messages : 342
Détails du profil
Informations personnelles :
Âge : 32
Localisation : Suisse

Informations forums :
Inscription : juin 2005
Messages : 342
Points : 311
Points : 311
ça marche pas comme ça en 2 secondes...

tu dois importer la classe : import mx.events.EventDispatcher;

puis l'initialiser : EventDispatcher.initialize( this );

puit l'utiliser pour générer tes évenements :

EventDispatcher.broadcastEvent( { type:"click", target:this } );


puis tu peux faire des abonnements avec des objets ou autre...

M'enfin, y faut te documenter 1 peu, car EventDispatcher est assez subtil à utiliser. Mais d'une fois que tu as commençé, tu n'arrêteras plus, tellement c'est utile et pratique

a++
titouille est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h12.


 
 
 
 
Partenaires

Hébergement Web