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 :

[AS2]Visibilité de variable dans une class [FAQ]


Sujet :

ActionScript 1 & ActionScript 2

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 200
    Points : 165
    Points
    165
    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 : 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
     
    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

  2. #2
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var monInstance:Diaporama = laDiapo;
    laDiapo.onRelease = function()
    {
     Suivantpress(monInstance);
    };
    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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]

  3. #3
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Points : 1 186
    Points
    1 186
    Par défaut
    Bonjour a tous,

    peut etre qu'avec quelques chose dans cette esprit :

    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
    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();
    		};
    	}
    }

  4. #4
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    Salut,

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

    il n'existe pas d'alternative ?

  5. #5
    Membre éprouvé
    Avatar de thecaptain
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Décembre 2003
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Décembre 2003
    Messages : 919
    Points : 1 210
    Points
    1 210
    Par défaut
    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 !

    @++

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 200
    Points : 165
    Points
    165
    Par défaut
    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 :
    ...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 :
    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.

  7. #7
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    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.

    +

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

Discussions similaires

  1. [POO] Variable dans une classe
    Par Space Cowboy dans le forum Langage
    Réponses: 3
    Dernier message: 15/02/2007, 20h23
  2. Ajout d'une variable dans une class fait planter
    Par Geoff-sk8 dans le forum C++
    Réponses: 4
    Dernier message: 11/10/2006, 14h27
  3. Réponses: 2
    Dernier message: 17/12/2005, 20h52
  4. [AS2] déclarer des variables dans une fonction
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 12
    Dernier message: 02/08/2005, 12h50
  5. [FLASH MX2004] [AS2] Accès aux variables d'une classe
    Par stailer dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 17/07/2005, 12h58

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