En parlant d'Eval...

En parlant d'Eval... - Flash/ActionScript - Programmation

Marsh Posté le 30-03-2005 à 10:57:58    

Bonjour,
Voila je dois recuperer dans un fichir des valeurs particulieres voila un apercu:


nbitems=5
&image1=image1.jpg&image2=image2.jpg&image3=image3.jpg&image4=image4.jpg&image5=image5.jpg
&age1=22&age2=25&age3=35&age4=40&age5=60


 
Je connais le nombre d'items à l'avance ici 5,
Mon but est de recuperer ces valeurs et de creer autant d'instance qu'il y a d'items:
 

Code :
  1. var nbpremiums=this.nbitems;
  2. nbpremiums++;
  3. var i;
  4. trace(nbpremiums);
  5. trace(this.age2);
  6. for (i=1;i<nbpremiums;i++)
  7. {
  8.  curimage="image"+i;
  9.  curage="age"+i;
  10.  trace("curimage vaut:"+curage);
  11.  trace("curimage vaut:"+this.[eval(curage)]);
  12.  symbole=Symbole1.duplicateMovieClip("Symbole"+i,i*100);
  13.  symbole.loader1.contentPath=eval(_root.curimage);
  14.  symbole.label1.text=eval(_root.curage);
  15.  symbole.adresse="http://www.google.fr";
  16. }


 
Ce que je n'arrive pas a faire c'est recuperer les valeurs du fichier texte de maniere dynamique:
 

Code :
  1. symbole.label1.text=this.age1;


ca marche!
 

Code :
  1. curage="age"+i;
  2. symbole.label1.text=eval(_root.curage);


Ca marche pas!!
 
Comment faire pour recuperer une variable au nom dynamique?

Reply

Marsh Posté le 30-03-2005 à 10:57:58   

Reply

Marsh Posté le 30-03-2005 à 11:03:11    

symbole.label1.text=_root[curage];
 
et pour test :

Code :
  1. _root.age1 = 10;
  2. var i=1;
  3. this.vname = "age"+i;
  4. trace(vname);
  5. trace(_root[vname]);



Message édité par Mr Mala le 30-03-2005 à 11:04:22
Reply

Marsh Posté le 30-03-2005 à 11:22:17    

Salut Mala,
apparement ca marche pas:

Code :
  1. _root.age1 = 10;
  2.  this.vname = "age"+i;
  3.  trace("age"+i);
  4.  trace(vname);
  5.  trace(_root[vname]);


 
me renvoit:


   age0
   undefined
   undefined

Reply

Marsh Posté le 30-03-2005 à 11:29:19    

c'est celaaaa ouiiiii ..  
et la ligne "var i=1;" elle est partie en vacances ? :D

Reply

Marsh Posté le 30-03-2005 à 11:38:18    

voila le code corrigé:

Code :
  1. _root.age1 = 10;
  2.  this.vname = "age"+i;
  3.  trace("age"+i);
  4.  trace("le nom de la vraiable est:"+this.vname);
  5.  trace("Sa valeur est:"+_root[this.vname]);


il fallait mettre this.vname et pas vname ;)
Merci Mala

Reply

Marsh Posté le 30-03-2005 à 11:50:25    

non pas spécialement ...
L'exemple que je t'ai donné fonctionne tel quel ...
Dans le code que tu as "corrigé", où est l'initialisation de ta variable i ???

Reply

Marsh Posté le 30-03-2005 à 11:51:55    

Au fait ca marche quand on fait une affectation a l'interieur du code comme ici:

Code :
  1. _root.age1 = 10


ca marche!
Mais moi je veux lire une valeur  dans un fichier texte et pour lui:

Code :
  1. this._root[this.curage]


vaut undifined!!!
alors que:

Code :
  1. this.age1 vaut 22


 
J y comprend plus rien!


Message édité par PETOZAK le 30-03-2005 à 11:53:54
Reply

Marsh Posté le 30-03-2005 à 11:53:13    

remarque c'est pitetre normal si root est le clip et pas le fichier loggé?

Reply

Marsh Posté le 30-03-2005 à 11:58:29    

heuuu ouais enfin ça dépend où tu charges ton fichier de variable ! .. dans la _root ?
 
heuuu et puis  

Code :
  1. this._root[this.curage]


... il n'y a pas un truc qui te choque là ? :lol:


Message édité par Mr Mala le 30-03-2005 à 12:00:41
Reply

Marsh Posté le 30-03-2005 à 12:02:12    

dans une fonction onload dans mon script principal:
 
voila le code:

Code :
  1. txt = new LoadVars();
  2. txt.load("premium.txt" );
  3. txt.onLoad = function() {
  4. var nbpremiums=this.nbitems;
  5. nbpremiums++;
  6. var i=0;
  7. trace(nbpremiums);
  8. trace(this.age2);
  9. /*
  10.  i=1;
  11.  _root.age1 = 10;  
  12.  this.vname = "age"+i;
  13.  trace("age"+i);
  14.  trace("le nom de la vraiable est:"+this.vname);  
  15.  trace("Sa valeur est:"+_root[this.vname]);
  16. */
  17. for (i=1;i<nbpremiums;i++)
  18. {
  19.  //_root.age1 = 10
  20.  curimage="image"+i;
  21.  this.curage="age"+i;
  22.  trace("curimage vaut:"+this.curage);
  23.  trace("curimage en dyn vaut:"+this._root[this.curage]);
  24.  trace("curimage en stat vaut:"+this.age1);
  25.  //symbole.label1.text=_root[curage];  
  26.  symbole=Symbole1.duplicateMovieClip("Symbole"+i,i*100);
  27.  symbole.loader1.contentPath=_root[curimage];
  28.  symbole.label1.text=_root[curage];
  29.  symbole.adresse="http://www.google.fr";
  30. }
  31. /*
  32.     Symbole1.loader1.contentPath=this.image1;
  33. Symbole2.loader1.contentPath=this.image2;
  34. Symbole3.loader1.contentPath=this.image3;
  35. Symbole4.loader1.contentPath=this.image4;
  36. Symbole5.loader1.contentPath=this.image5;
  37.  
  38. Symbole1.adresse="http://www.google.fr";
  39.  
  40. Symbole1.label1.text=this.age1;
  41. Symbole2.label1.text=this.age2;
  42. Symbole3.label1.text=this.age3;
  43. Symbole4.label1.text=this.age4;
  44. Symbole5.label1.text=this.age5;
  45.  
  46. Symbole5.visible=false;
  47. */
  48. };
  49. var position;
  50. var pas=3;
  51. var depart=100;
  52. var fin=500;
  53. var Temp;
  54. //var Last=Symbole5;
  55. actionClip.onEnterFrame=function()
  56. {//rafraichissement a chaque entrée de frame (ici c la frame 1 qui boucle sur elle meme)
  57.  Symbole1._x+=pas;
  58.  Symbole2._x+=pas
  59.  Symbole3._x+=pas;
  60.  Symbole4._x+=pas;
  61.  if (Symbole1._x>=fin)
  62.   {
  63.    Symbole1._x=depart;
  64.    Temp=Last;
  65.    Last=Symbole1;
  66.    Symbole1=Temp;
  67.   }
  68.  if (Symbole2._x>=fin)
  69.   {
  70.    Symbole2._x=depart;
  71.    Temp=Last;
  72.    Last=Symbole2;
  73.    Symbole2=Temp;
  74.   }
  75.  if (Symbole3._x>=fin)
  76.   {
  77.    Symbole3._x=depart;
  78.    Temp=Last;
  79.    Last=Symbole3;
  80.    Symbole3=Temp;
  81.   }
  82.  if (Symbole4._x>=fin)
  83.   {
  84.    Symbole4._x=depart;
  85.    Temp=Last;
  86.    Last=Symbole4;
  87.    Symbole4=Temp;
  88.   }
  89.  //trace(Symbole1._x);
  90. }


Message édité par PETOZAK le 30-03-2005 à 12:04:01
Reply

Marsh Posté le 30-03-2005 à 12:02:12   

Reply

Marsh Posté le 30-03-2005 à 12:11:48    

ligne 24 .. toujours rien qui te choque ??? :/
 

Reply

Marsh Posté le 30-03-2005 à 12:15:18    

le this._root[curage]
This de root c'est pas bon c'est ca?
Au fait ce que je cherche c'est recuperer:
age1
age2
age3
.
.
.
ageN
donc je suis obliger de faire un root pour ("age"+i)

Reply

Marsh Posté le 30-03-2005 à 12:25:28    

Coincé Mr Mala?:(

Reply

Marsh Posté le 30-03-2005 à 12:29:55    

PETOZAK a écrit :

donc je suis obliger de faire un root pour ("age"+i)


 
:non:  
 
Ton age[1->N] sont des variables chargées dans l'objet LoadVars courant !
 
Tu le montres toi-même par ton "trace(this.age2);" !
 
Donc, si tu as en _root une variable 'age1' que tu construit dynamiquement en faisant curage="age"+1; et que tu vas chercher, en étant dans la _root, en faisant "_root[curage]" ...
Donc, si maintenant, tu te trouves dans 'this' et que ta variable est dans 'this' et que tu construis le nom de ta variable dynamiquement dans 'this' ( dans le cas présent, 'this' étant ton objet LoadVars ), tu vas donc la chercher par ........ ???
 

Reply

Marsh Posté le 30-03-2005 à 12:49:31    

curage="this.age"+i; ?

Reply

Marsh Posté le 30-03-2005 à 12:53:56    

Au fait mala, tu as la reponse ou pas?

Reply

Marsh Posté le 30-03-2005 à 13:09:29    

Ben oui ! :heink:  
 
Tu patauges dans un marais de '_root' et de 'this' sans même te poser la question de l'endroit exact où se trouvent tes variables ! [:spamafote]
 
Alors je vais une fois de plus répèter :
this._root[this.curage]
CA, ça te semble cohérent ?
Où se trouve la variable dont le nom est contenu dans 'curage' ???


Message édité par Mr Mala le 30-03-2005 à 13:09:49
Reply

Marsh Posté le 30-03-2005 à 13:24:29    

curage="age"+i;
se trouve dans fichier texte:
exemple:
&age1=22&age2=25&age3=35&age4=40&age5=60
this.age1 me renvoit 22
le code que j'ai collé tout a l'heure est dans le calque action1
Je ne connais pas du tout le fonctionnement de root!
J'espere que c'est suffisant?

Reply

Marsh Posté le 30-03-2005 à 13:45:51    

Bon .. ben on va reprendre depuis le début ... [:spamafote]
 
Tu crées un objet LoadVars ( txt )
Et tu appelles sa fonction load("brol.txt" );
Toutes les variables chargées de brol.txt seront DANS cet objet LoadVars.
Dans la gestion de l'évènement onLoad(), tu te trouves implicitement DANS cet objet LoadVars !
Donc, toutes les références à des variables contenues dans cet objet dans le onLoad() se feront par this.nomDeLaVariable
Donc, si tu charges une variable 'age1', dans le onLoad de ton objet LoadVars, tu y accèderas par this.age1
Si tu crées une "variable dynamique" this.curage dans le onLoad(), elle sera donc ..... ??? .. Dans l'objet LoadVars.
Si dans cette variable, tu mets "age"+N ( on va dire N=1 ) et que tu veux récupérer la valeur de la variable dont le nom est contenu dans this.curage ( donc, pour l'exemple, 'age1' ), tu feras comment pour récupérer sa valeur en considérant que, si la variable était dans la _root, tu ferais _root[curage] et que pour accéder à tes variables INTERNES à ton objet LoadVars, tu utilises this ???
La question est pourtant simple : où est la variable 'age1' ?
 
Je peux pas aller plus loin !!! Un cran de plus et je te donne la réponse toute cuite et toute mâchée !! :/

Reply

Marsh Posté le 30-03-2005 à 14:21:05    

la variable age1 est dans le onload du loadvars() donc on utilise this normalement mais le prob c'est que l'on doit evaluer Age+i donc passer par root non?
this.curage ne marchant pas!

Reply

Marsh Posté le 30-03-2005 à 14:46:12    

Mr Mala, je ne vois pas :(
et j 'ai d'autre truc a faire et pas en flash :)
donc je donne ma langue au chat

Reply

Marsh Posté le 30-03-2005 à 14:54:06    

Bon j'abandonne ... [:spamafote]
Toute façon, tu patauges avec les accès _root, this, .. etc
Je ne sais pas si c'est un truc que tu fais de ton plein gré ... mais avant de te lancer là-dedans, tu aurais dû apprendre les bases ! :/
Regarde la ligne 12 .. elle est 'magique' !

Code :
  1. txt = new LoadVars();
  2. txt.load("premium.txt" );
  3. txt.onLoad = function() {
  4.     var nbpremiums=this.nbitems;
  5.     nbpremiums++;
  6.     trace(nbpremiums);
  7.        
  8.     for (i=1;i<nbpremiums;i++)
  9.     {
  10.         this.curage="age"+i;
  11.         trace("curage vaut:"+this.curage);
  12.         trace("valeur de curage en dyn vaut:"+this[this.curage]);
  13.     }
  14. };
  15. stop();


Message édité par Mr Mala le 30-03-2005 à 14:54:41
Reply

Marsh Posté le 30-03-2005 à 14:58:47    

merci mais je n'aurai jamais trouvé:
Cette syntaxe est completement nimp:
this[this.curage]  
mais bon elle marche!!
Je te remercie d'y etre aller de maniere didactique mais il fallait me dire que this pouvait s'utiliser comme un tableau :p

Reply

Marsh Posté le 30-03-2005 à 15:05:27    

PETOZAK a écrit :

merci mais je n'aurai jamais trouvé:
Cette syntaxe est completement nimp:
this[this.curage]  
mais bon elle marche!!
Je te remercie d'y etre aller de maniere didactique mais il fallait me dire que this pouvait s'utiliser comme un tableau :p


 
:heink:

Reply

Marsh Posté le 30-03-2005 à 17:09:22    

petite question subsidiaire:
UN fois sortie du onload (j'ai loadé mes valeurs dans txt.onLoad = function() )
Comment faire pour recuperer les valeurs de ces variables?

Code :
  1. Symbole2=Premium2;??
  2. Symbole2=txt[Premium2];??
  3. Symbole2=that.Premium2;??


sachant que:

Code :
  1. symbole=Symbole1.duplicateMovieClip("Premium"+i,i*100);


est dans txt.onLoad = function() et que je dois
les recuperer dans

Code :
  1. actionClip.onEnterFrame=function()

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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