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 :

Modification de données private d'une classe


Sujet :

ActionScript 1 & ActionScript 2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Par défaut Modification de données private d'une classe
    Salut,

    Je souhaite modifier des données d'une classe, à travers ce code (simplifié)

    Fichier MainBal.as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include "Metier.as"
    import Player;
     
    var perso1:Player=new Player();
    var perso2:Player=new Player()
     
    Joueur2.gotoAndPlay(perso2.listCoup[a]); //mouvement attaquant
    Joueur1.gotoAndPlay(perso1.listCounter[a]);	// mouvement défenseur
    var strResAttack:String=ManageLife(perso2,perso1,a);
    Fichier Metier.as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import Player;
     
    function ManageLife(clsAttack:Player,clsCounter:Player,i:Number):String
    ...
    var vie:Number=clsCounter.Life-20;
    trace ("vie :"+vie);
    clsCounter.Life(vie);
    ...
    Fichier Player.as
    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 Player 
    {
    private var intLife:Number;
     
    public function Player(){	
    		intLife=100;
    	}
     
    function set Life(intLife:Number):Void { 
    	 	this.intLife =  intLife;
     	} 
     
    function get Life():Number { 
    		return this.intLife;
    	}
    }
    Le problème est que lorsque je mets une trace pour avoir la valeur de private , il reste à 100 !

    Je me dis que c'est une question de passage par valeur ou référence, mais sur actionscript, je sèche complet. Quelqu'un saurait-il où ca coince ? J'ai peut-être mal fait qqch !

  2. #2
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Par défaut
    Bon, j'ai trouvé d'où ça venait...il fallait écrire
    clsCounter.Life=vie;
    à la place de :
    clsCounter.Life(vie);

    Par contre un petit autre soucis
    Je garde le même code en ne modifiant que le fichier Metier.as comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     1. import Player;  
       2.   
       3. function ManageLife(clsAttack:Player,clsCounter:Player,i:Number):String{ 
       4. var vie:Number; 
       5.  ...  
       6. vie=clsCounter.Life-20;  
       7. clsCounter.Life(vie); 
       8. trace (vie adversaire : " + clsCounter.Life); 
       9.  ...
    J'appelle une seule fois la fonction ManageLife, et j'obtiens ceci en trace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       1. vie adversaire : 80 
       2. vie adversaire : 60 
       3. vie adversaire : 40 
       4. vie adversaire : 20 
       5. vie adversaire : 0
    Au lieu de :
    tout simplement...

    Quelqu'un saurait-il d'où cela vient ?

    Merci

  3. #3
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 126
    Par défaut
    Bon en fait, après une pause déjeuner, les idées claires, j'ai su d'où venait le problème.
    En fait je charge plusieurs clip comme ceci :
    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
    var clipLogo:MovieClip = this.createEmptyMovieClip("Logo", 2);
    var clipPerso1:MovieClip = this.createEmptyMovieClip("Joueur1", 3);
    var clipPerso2:MovieClip = this.createEmptyMovieClip("Joueur2", 4);
     
    var mcl:MovieClipLoader = new MovieClipLoader(); //gestionnaire du chargement
    var ecouteurChargement:Object = new Object(); 
    ecouteurChargement.onLoadStart = function(target:MovieClip):Void { trace("start"); };
    ecouteurChargement.onLoadProgress = function(target:MovieClip, loaded:Number, total:Number):Void { trace("progress"); };
    ecouteurChargement.onLoadComplete = function(target:MovieClip):Void { trace("complete"); };
     
    ecouteurChargement.onLoadInit = function(target:MovieClip):Void { 
    ...
    clipPerso1.gotoAndPlay("etiquette");	// mouvement défenseur
    var strResAttack:string=ManageLife(perso2,perso1,1);
    ...
    };
     
    ecouteurChargement.onLoadError = function(target:MovieClip, code:String):Void { trace("erreur"); }
     
    mcl.addListener(ecouteurChargement);
    var perso1:Player=new Player();
    var perso2:Player=new Player();
     
    var nom:String=perso1.NamePerso;
    var nom2:String=perso2.NamePerso;
     
    mcl.loadClip("logoArena.jpg", clipLogo);
    mcl.loadClip(nom + ".swf", clipPerso1); 
    mcl.loadClip(nom2 + ".swf", clipPerso2);

    Les fonctions appelées dans le onLoadInit sont appelées autant de fois qu'il y a de conteneurs.
    Dans mon cas, si je veux changer une valeur une seule fois, elle le sera trois fois.
    Comment faire pour mieux gérer mon cas ?

Discussions similaires

  1. [Débutant] Modification d'un Control via une classe
    Par Owleur dans le forum Windows Forms
    Réponses: 9
    Dernier message: 09/04/2013, 17h29
  2. Réponses: 2
    Dernier message: 13/07/2012, 13h08
  3. accès au données private d'une classe
    Par eskato dans le forum Débuter
    Réponses: 5
    Dernier message: 13/05/2010, 18h50
  4. Réponses: 19
    Dernier message: 14/12/2009, 10h11
  5. attribut private d'une classe
    Par poukill dans le forum C++
    Réponses: 7
    Dernier message: 24/07/2006, 11h50

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