[AS3 - newbies] Mes questions pour bien débuter

Mes questions pour bien débuter [AS3 - newbies] - Flash/ActionScript - Programmation

Marsh Posté le 15-12-2008 à 08:53:40    

Bonjour à tous ! (Oh, Zed, merci d'être venu !)
Comme certains le savent, je me suis lancé dans l'Action-Script, mais n'ayant eu qu'une formation de base, je suis plutôt limité dans mes possibilités.
J'arrive très souvent à solutionner mes défis, mais je chie un code qui en fera vomir plus d'un, alors pour m'améliorer, je fais appel à vous.
Ici sera donc ma cabane à question. Merci à tous ceux qui s'y incrusteront
 
Comment faire pour "détecter" le changement d'une valeur de variable proprement (Y a t-il un Listener magique ?)
En gros, à chaque fois qu'une variable change, je veux lancer une fonction.
 
J'ai bricoler quelque chose de fonctionnel, mais surement lourd pour le CPU :

Code :
  1. //Initialisation
  2.   var maVariable:int = 1 // valeur de départ
  3.   var Current_maVariable:int = maVariable;
  4.   var testChange:String; // var inutile => pour un test
  5.  
  6. // Un evt EnterFrame, appele une fonction contenant :
  7.  
  8. if(maVariable != Current_maVariable){
  9.   testChange = "La variable vient de passer de "+Current_maVariable+" à "maVariable;
  10.   trace (testChange);
  11.   Current_maVariable = maVariable;


 
Voila, des surveillants comme ça il m'en faut 5 ou 6, donc, pas très propre non ?...


Message édité par abais le 15-12-2008 à 18:46:37

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

Marsh Posté le 15-12-2008 à 08:53:40   

Reply

Marsh Posté le 15-12-2008 à 09:04:37    

Ben normalement quand on programme bien en AS3,
ta varible est private, et ce sont tes getters et setter qui sont publics.
 
à partir de ce moment là tu peux via le setter lancer un event pour signaler que ta variable a été changer.
 

Code :
  1. public class test {
  2.     private var _maVariable:int = 1 // valeur de départ
  3.     public function get maVariable():int {
  4.         return _maVariable;
  5.     }
  6.     public function set maVariable(maVariable:int):void {
  7.         if (_maVariable==maVariable)
  8.             return;
  9.         _maVariable=maVariable;
  10.         trace('ma var a changé')
  11.     }
  12.  
  13. }

Reply

Marsh Posté le 15-12-2008 à 09:09:39    

Thx, je vais aussi tôt me renseigner sur la notion de Getters / Setters que je ne conceptualise pas trop.


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

Marsh Posté le 15-12-2008 à 09:10:42    

Bah apres pour utiliser ta variable c'est comme d'hab :

 

var obj:Test = new Test();
obj.maVariable = 3;

 

>>> la variable a été changée


Message édité par gatsu35 le 15-12-2008 à 09:54:39
Reply

Marsh Posté le 15-12-2008 à 09:31:55    

Mwarf, je lis plein de truc sur get / set mais je ne comprend pas trop, dsl, j'ai encore du chemin.


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

Marsh Posté le 16-12-2008 à 05:54:25    

Mais t'as essayé l'exemple de Gatsu ?

 

Le get/set, tu l'utilises tout les jours, sans le savoir.
Ca sert a definir ou recuperer la valeur d'une variable.

 

Exemple :
var monClip = new MovieClip();
monClip.x = 3; (set)
trace(monClip.x) (get)

 

De son coté, AS comprend que tu crees un objet MovieClip.
Si tu vas dans l'aide a MovieClip et que tu regardes la proprieté 'x' (il faut que tu affiches les proprietés publics hérités pour ca) http://livedocs.adobe.com/flash/9. [...] ect.html#x , tu vas voir qu'il est ecrit : [read-write] (dsl j'ai la version anglaise)
Donc, c'est une propriété que tu peux lire et ecrire. (get & set)
D'ailleurs si tu regardes bien l'aide, il te le precise:
public function get x():Number
public function set x(value:Number):void

 

Ce qui te permet au passage de savoir ce que va retourner ta methode.
Dans le cas du get, il te retourne un nombre (ex: trace(monclip.x) // display "100" )
Dans le cas du set, ca ne retourne rien, mais tu dois lui passer un parametre (un nombre)

 

Ca parait simple parce que c'est MovieClip et c'est la premiere classe qu'on apprend quand on ouvre Flash. Mais dans les classes plus compliqués, c'est bien de savoir a l'avance ce que ca renvoi et ce qu'il faut lui envoyer.

 

Des fois tu n'as que le get
http://livedocs.adobe.com/flash/9. [...] tml#mouseX

 

Tu ne peux pas attribuer de variable a ta propriété.

 

Bref, pour revenir a ton cas, dans la classe MovieClip, quand tu modifies le x, tu utilises un 'set', et ca deplace automatiquement ton clip sur la scene.
Action > Reaction. Et c'est ce que tu veux.

 

Action monObj.maVar = 3;

 

Reaction "Vous avez changé la variable"

 

Donc t'as pas besoin de plus que l'exemple de Gatsu ...


Message édité par Zedlefou le 16-12-2008 à 05:55:16

---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 16-12-2008 à 11:57:59    

Ok, ça commence à rentrer, mon pépin c'est que je me force à utiliser l'AS3 pour PV3D, et il faut donc que je m'habitue à sortir le code dans une classe. Ça vous parait surement con, mais c'est pas évident pour moi, je vous remercie d'ailleurs de m'y consacrer de votre temps [:romf]...
J'accuse la tolérance de l'as2 de m'avoir donné de mauvaises habitudes... [:piksou]


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

Sujets relatifs:

Leave a Replay

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