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 05/12/2007, 17h21   #1
Membre habitué
 
Inscription : novembre 2004
Messages : 197
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 197
Points : 120
Points : 120
Par défaut [AS2]Visibilité de variable dans une class

Bonjour,
J'ai un petit problème de visibilité de variable dans une class.
J'ai donc une class Diaporama dans laquelle j'ai une fonction AllerADroite() qui me permet de faire défiler mes diapositives.
Voici donc la partie du code qui nous interresse:

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
 
class Diaporama{
	var Suivant: MovieClip;
 
	function AllerADroite(){
		trace('AllerADroite ');
	}
	//------------------------------------------	
	function SuivantPress() {
		//! On entre dans une fonction qui n'est pas considéré comme faisant partie 
		// de l'ojbet diapo donc qui ne connait pas les autre fonction
		trace('Suivant '+Suivant); // --> Affiche undefined 
		trace(AllerADroite); //--> Affiche undefined 
		AllerADroite(); //qui n'est donc pas appelé
		trace('typeof(this)  '+typeof(this)); //--> Affiche MovieClip
		trace('this '+(MovieClip(this))._parent); //Sans cast this ne connait pas _parent !
	};
	//------------------------------------------------------
	function AffecteEvenements(){
		Suivant.Fleche.onPress =  SuivantPress;
	}
}
 
//// Dans mon fichier .fla
var diapo : Diaporama = new Diaporama;
diapo.Suivant = ClipSuivant; //CLipSuivant est posé sur la scene à la conception
diapo.AffecteEvenements();
Le problème, comme marqué dans les commentaires, est que dans SuivantPress on ne voit ni les variables ni les fonctions de la class Diaporama.
Et comme j'ai plusieurs instance du Diaporama sur la scene je crois qu'on peut oublier les variables static.
Si quelqu'un sait pourquoi, ou sait comment contourner le problème ...
Merci
__________________
Si vous avez votre réponse n'oubliez pas !
ViveLesQuads est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2007, 20h07   #2
Rédacteur/Modérateur
 
Avatar de beekeep
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 1 606
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 1 606
Points : 2 234
Points : 2 234
Salut,

j'ai eu le même problème il y a peu de temps.

la solution que j'ai trouvé n'est pas vraiment conseillée comme règle de codage,
mais je vais la donner et peut-être que quelqu'un saura mieux faire.

Lorsque tu affecte l'évènement à la méthode SuivantPress, passe ton instance en paramètre pour accéder à ses membres.

exemple à adapter à ton code non présent :
Code :
1
2
3
4
5
6
 
var monInstance:Diaporama = laDiapo;
laDiapo.onRelease = function()
{
 Suivantpress(monInstance);
};
donc
Code :
1
2
3
4
function SuivantPress(oThis:Diaporama)
{
  oThis.AllerADroite();
}
surement adaptable en utilisant un fonction statique.

[EDIT]
si tu peux mettre le code de la fonction AffecteEvenements ça serait bien ..
[/EDIT]
beekeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 03h13   #3
Inactif
 
Avatar de CR_Gio
 
Inscription : septembre 2005
Messages : 1 196
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 1 196
Points : 1 201
Points : 1 201
Bonjour a tous,

peut etre qu'avec quelques chose dans cette esprit :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Diapo
{
	var my_mc : MovieClip;
 
	function SomeMethode()
	{
		// ici, this est une instance de Diapo
		trace("Call SomeMethode() ");
	}
	function AddEvent()
	{
		var ThisClass:Diapo = this;
		my_mc.onPress = function()
		{
			// ici, this est une instance de my_mc
			// ici, ThisClass est une instance de Diapo
			ThisClass.SomeMethode();
		};
	}
}
CR_Gio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 14h44   #4
Rédacteur/Modérateur
 
Avatar de beekeep
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 1 606
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 1 606
Points : 2 234
Points : 2 234
Salut,

cette méthode serait donc utilisée par tout le monde ??

il n'existe pas d'alternative ?
beekeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 15h56   #5
Membre émérite
 
Avatar de thecaptain
 
Étudiant
Inscription : décembre 2003
Messages : 916
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2003
Messages : 916
Points : 898
Points : 898
Salut,

Citation:
Envoyé par beekeep Voir le message
cette méthode serait donc utilisée par tout le monde ??
Oui Mais la plupart des gens passent par la classe Delegate qui t'automatise ce genre de chose !

@++
__________________
API ScrollBar (AS2)
Masapi (Massive Loading API) (AS3)
Lost in AStorm
thecaptain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 15h57   #6
Membre habitué
 
Inscription : novembre 2004
Messages : 197
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 197
Points : 120
Points : 120
Bonjour et merci à tous,
Après avoir exploré plus en profondeur l'aide j'ai trouvé la fonction Delegate.
L'aide dit clairement, à propos de la fonction appelée par l'évenement, que :
Citation:
...elle est invoquée dans le domaine de l'occurrence de composant qui appelle cette méthode. Cela signifie que le mot-clé this, lorsqu'il est utilisé dans la fonction, fait référence à l'occurrence de composant à l'origine de la diffusion. Cela pose un problème lorsque vous définissez la fonction dans un fichier de classe. Vous ne pouvez pas accéder aux propriétés et méthodes du fichier de classe par les chemins prévus car this ne pointe pas vers une occurrence de la classe. Pour résoudre ce problème, servez-vous de la classe Delegate pour déléguer la fonction au domaine approprié.
En utilisant Delegate, this fait bien référence à mon diaporama(dans ma fonction SuivantPress). Mais dans ce cas je ne sais plus sur quel clip j'ai cliqué ! Si j'ai un seul clip qui fait référence à cette fonction, c'est pas un problème. Mais quand j'ai plusieurs clips qui utilisent la même fonction sur leur onPress c'est plus genant!
Affaire à suivre...

PS:
beekeep :
Citation:
si tu peux mettre le code de la fonction AffecteEvenements ça serait bien ..
C'est déja fait normallement. Il y a juste une ligne

CR_Gio :
J'ai déja essayé "quelques chose dans cette esprit" mais le résultat est le même. Je n'ai pas acces à ThisClass.
__________________
Si vous avez votre réponse n'oubliez pas !
ViveLesQuads est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 16h47   #7
Rédacteur/Modérateur
 
Avatar de beekeep
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 1 606
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 1 606
Points : 2 234
Points : 2 234
Lut à tous,

les Delegates !! je pensai pas que ça existait en ActionScript ..

ça serait bien de coder un exemple d'utilisation pour la classe Diapo,

et éventuellement l'insérer dans la FAQ ou les cours.

+
beekeep 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 11h19.


 
 
 
 
Partenaires

Hébergement Web