sauvegarde variable as3

sauvegarde variable as3 - Flash/ActionScript - Programmation

Marsh Posté le 19-12-2010 à 13:06:18    

Bonjour à tous,
 
C'est ma première question sur ce forum !
Voilà mon problème : j'ai une fonction "test1" qui fait passer une variable "etat1" de false à true et inversement. Le problème, c'est que si je met ma variable "etat1" en paramètre de cette fonction, je n'arrive pas à sauvegarder la valeur de cette variable (flash va considérer que "etat1" est toujours true).
 
var etat1:Boolean=true;
 
function test1(etat:Boolean){
if (etat==true){
etat=false;}
else{
etat=true;}
}
 
test1(etat1);
 
Par contre si je fais :  
 
function test1(){
if (etat1==true){
etat1=false;}
else{
etat1=true;}
}
 
test1();
 
cette fois, ça marche, la variable "etat1" est bien sauvegardée.
Y a t'il un moyen de corriger ça ?
Merci beaucoup si vous pouvez m'aider !!!

Reply

Marsh Posté le 19-12-2010 à 13:06:18   

Reply

Marsh Posté le 21-12-2010 à 09:48:49    

C'est normal, l'argument d'une fonction ne sert qu'à l'intérieur de cette fonction, sauf si tu le retourne d'une manière ou d'une autre, mais c'est autre chose...
Par conséquent, ce n'est pas directement "etat1" qui est envoyé en paramètre à ta fonction test1(), mais sa valeur seulement.

 

Tu as plusieurs solutions :

 

1) Tu fais ça très proprement et tu rajoute une méthode à ta propre Class issu de Boolean de Flash pour faire ce que tu veux (inverser la valeur booléenne), une methode que tu appèlera sur ta variable, mais si tu ne connais pas la programmation objet un minimum, ne t'y aventures pas...

 

2) Tu créé une fonction qui retourne une valeur, l'inverse de celle passée en argument :

Code :
  1. function inverseBoolean(monBoolean:Boolean):Boolean
  2. {
  3.    var inverse:Boolean;
  4.    monBoolean ? inverse = false : inverse = true ;
  5.    // C'est un if/else raccourci, dont la syntaxe est ( CONDITION ) ? ( instruction si VRAI) : (instruction si FAUX);
  6.    // On aurais pu directement mettre ça :
  7.    var inverse:Boolean = monBoolean ? false : true ;
  8.    // Puis la fonction retourne inverse;
  9.    return inverse;
  10. }
  11.  
  12. var maVariable:Boolean = true;
  13.  
  14. // Tu devras utiliser ta fonction ainsi :
  15. maVariable = inverseBoolean(maVariable)


3) Meme solution mais sans passer par un retour, beaucoup plus crade mais bon...

Code :
  1. function inverseBoolean(conteneur:Object, booleanName:String):Void
  2. {
  3.    // Le conteneur est là si jamais la variable ciblé n'est pas dans le même que celui ou tu appel la fonction...
  4.    conteneur[booleanName] ? conteneur[booleanName] = false : conteneur[booleanName] = true;
  5. }
  6.  
  7. var maVariable:Boolean = true;
  8.  
  9. // Tu devras utiliser ta fonction ainsi :
  10. inverseBoolean(this, "maVariable" )


Message édité par abais le 24-12-2010 à 09:28:50

---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
Reply

Marsh Posté le 27-12-2010 à 16:50:07    

Super, Merci beaucoup !
J'ai utilisé la deuxième solution qui est simple et efficace !
A +, joyeux noël, et vivement Pâques !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed