Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3052 connectés 

  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  AS2 : Une histoire de couleurs...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

AS2 : Une histoire de couleurs...

n°2014247
lxl ihsahn​ lxl
●⌠ Antaigris ⌡●
Posté le 04-08-2010 à 17:10:02  profilanswer
 

Voila, j'ai une occurence que je souhaiterais voir changer de couleur à chaque fois que j'arrive sur une frame précise du clip-père. J'ai tenté de faire un code à partir de solutions trouvés sur internet, mais je bloque sur un souci.

 

La fonction marche, à savoir qu'en arrivant sur la frame la couleur change, mais elle change alors sans cesse. Si je fais un delete la couleur appliquée est retirée.

 

Voila le code :

 
Code :
  1. this.onEnterFrame = function() {
  2.      coloRandom = function() {
  3. _global.ToHex = function(d)
  4. {
  5. var HexChars = "0123456789abcdef";
  6. var d0 = d % 20;
  7. var d1 = (d-d0) /16;
  8. var x1 = HexChars.charAt(d1);
  9. var x0 = HexChars.charAt(d0);
  10. return x1+x0;
  11. }
  12. _global.RandomColor = function()
  13. {
  14. Red = ToHex((random(256)));
  15. Green = ToHex((random(256)));
  16. Blue = ToHex((random(256)));
  17. return "0x"+Red+Green+Blue;
  18. }
  19. var Couleur = RandomColor();
  20. myColor = new Color(this.afond.fond);
  21. myColor.setRGB(Couleur);
  22.         }
  23. coloRandom();
  24. }
 

La var Couleur est superflue.

 

En fait ce qui m'arrangerait, c'est que cette fonction ne s'exécute qu'une seule fois et que son effet perdure.

 

Si quelqu'un à la gentillesse de me donner un petit indice, j'en serais très heureux :hello:


Message édité par lxl ihsahn lxl le 04-08-2010 à 17:18:32

---------------
[YouTube] Le Cerveau Lent : vulgarisation sciences cognitives ◦ [url=https://forum.hardware.fr/hfr/AchatsVentes/Photo-Audio-Video/vds-pentax-samyang-sujet_644991_1.htm]Vente Penta
mood
Publicité
Posté le 04-08-2010 à 17:10:02  profilanswer
 

n°2014313
abais
Posté le 04-08-2010 à 21:35:56  profilanswer
 

Le pire, c'est que tes methodes, en plus d'être appelé sont DECLARÉS dans ton onEnterFrame, c'est très crade... (Zedlefou, si tu passe par là... :D)

 


Code :
  1. // Je déclare les 3 fonctions qui vont me servir, sans imbrications !
  2.  
  3. decimalToHex = function(d):String
  4. {
  5.     var HexChars:String = "0123456789abcdef";
  6.     var d0:uint = d % 20; // Pourquoi modulo 20 ? en hexa !
  7.     var d1:uint = uint((d-d0)/16); // hein ? oula...
  8.     var x1:String = HexChars.charAt(d1);
  9.     var x0:String = HexChars.charAt(d0);
  10.     return x1+x0;
  11. }
  12.  
  13. generateRandomColor = function():String // je sais pas si on peut/doit retourner un Number ici en AS2...
  14. {
  15.     var Red:String = decimalToHex((random(256)));
  16.     var Green:String = decimalToHex((random(256)));
  17.     var Blue:String = decimalToHex((random(256)));
  18.     //en AS3, pour avoir une couleur random, on a juste à faire Math.random()*0xFFFFFF...
  19.     return "0x"+Red+Green+Blue;
  20. }
  21.  
  22. changeCouleur = function():void
  23. {    
  24.     //Je m'inspire de ce qu'il y avais deja là...
  25.     var myColor = new Color(this.afond.fond);
  26.     myColor.setRGB(generateRandomColor());
  27. }
 

Et dans ton clip parent, tu met le code monOccurence.changeCouleur(); à chaque frame (image clé) ou tu veux que ça change.
Je suis pas sûre du typage des fonctions, AS2 c'est relou avec sa sur-tolérence (du fait que ton code marche tel que tu l'as mis).
Je suis pas sure des majuscule sur certain typage, je crois que certains changent en AS3...
Bref, passe à l'AS3, ça sera plus simple

Message cité 1 fois
Message édité par abais le 04-08-2010 à 21:44:09

---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°2014425
lxl ihsahn​ lxl
●⌠ Antaigris ⌡●
Posté le 05-08-2010 à 12:02:18  profilanswer
 

abais a écrit :

Le pire, c'est que tes methodes, en plus d'être appelé sont DECLARÉS dans ton onEnterFrame, c'est très crade... (Zedlefou, si tu passe par là... :D)
 
 

Code :
  1. // Je déclare les 3 fonctions qui vont me servir, sans imbrications !
  2.  
  3. decimalToHex = function(d):String
  4. {
  5.     var HexChars:String = "0123456789abcdef";
  6.     var d0:uint = d % 20; // Pourquoi modulo 20 ? en hexa !
  7.     var d1:uint = uint((d-d0)/16); // hein ? oula...
  8.     var x1:String = HexChars.charAt(d1);
  9.     var x0:String = HexChars.charAt(d0);
  10.     return x1+x0;
  11. }
  12.  
  13. generateRandomColor = function():String // je sais pas si on peut/doit retourner un Number ici en AS2...
  14. {
  15.     var Red:String = decimalToHex((random(256)));
  16.     var Green:String = decimalToHex((random(256)));
  17.     var Blue:String = decimalToHex((random(256)));
  18.     //en AS3, pour avoir une couleur random, on a juste à faire Math.random()*0xFFFFFF...
  19.     return "0x"+Red+Green+Blue;
  20. }
  21.  
  22. changeCouleur = function():void
  23. {    
  24.     //Je m'inspire de ce qu'il y avais deja là...
  25.     var myColor = new Color(this.afond.fond);
  26.     myColor.setRGB(generateRandomColor());
  27. }


 
Et dans ton clip parent, tu met le code monOccurence.changeCouleur(); à chaque frame (image clé) ou tu veux que ça change.
Je suis pas sûre du typage des fonctions, AS2 c'est relou avec sa sur-tolérence (du fait que ton code marche tel que tu l'as mis).
Je suis pas sure des majuscule sur certain typage, je crois que certains changent en AS3...
Bref, passe à l'AS3, ça sera plus simple


 
 
Bon j'ai bien évidemment passé du temps dessus pour essayer de régler le problème.

Code :
  1. coloRandom = function() {
  2. _global.ToHex = function(d)
  3. {
  4. var HexChars = "0123456789abcdef";
  5. var d0 = d % 16;
  6. var d1 = (d-d0) /16;
  7. var x1 = HexChars.charAt(d1);
  8. var x0 = HexChars.charAt(d0);
  9. return x1+x0;
  10. }
  11. _global.RandomColor = function()
  12. {
  13. Red = ToHex(Math.round(Math.random()*16)+32);
  14. Green = ToHex(Math.round(Math.random()*16)+32);
  15. Blue = ToHex(Math.round(Math.random()*16)+32);
  16. return "0x"+Red+Green+Blue;
  17. }
  18. var Couleur = RandomColor();
  19. myColor = new Color(this.carre.unite);
  20. myColor.setRGB(Couleur);
  21. }


 
 
Le coup du decimalToHex je l'ai trouvé sur le net, j'ai pas assez de bouteille pour penser à des trucs aussi farfelus :D
Mais une fois penché sur le code je me suis dit que le 20 ne voulait rien dire. J'ai trouvé que % était modulo et j'ai mieux pigé le truc.  
 
J'ai remplacé les random par des Math.round(Math.random), j'ai l'impression que le random() est moins satisfaisant en terme d'aléa, mais je me trompe peut-être, enfin reste que du coup j'utilise un offset pour limiter la plage d'aléas, et je peux créer des zones de couleurs différentes.
 
 
Donc je résume. Je définis ma fonction (ici coloRandom) au niveau supérieur, et je l'appelle sur la timeline de ce clip ? Autant mettre le code sur _root non ?
 
Je sais que c'est pas très malin de déclarer les fonctions dans un this.onEnterFrame, mais c'est plus facile à comprendre quand on n'a ni l'habitude ni une forte abstraction :D
 
 


---------------
[YouTube] Le Cerveau Lent : vulgarisation sciences cognitives ◦ [url=https://forum.hardware.fr/hfr/AchatsVentes/Photo-Audio-Video/vds-pentax-samyang-sujet_644991_1.htm]Vente Penta
n°2014435
abais
Posté le 05-08-2010 à 12:31:55  profilanswer
 

Oui, ça devrait etre modulo 16 en hexa...
var d0 = Math.floor(d /16);
var d1 = d % 16;
...
 
Pour les declarations dans l'onEnterFrame, tu devrais avoir honte toute ta vie ! Et si je fais une dédicasse à Zed, c'est parceque j'avais fait pareil, alors que je débutais comme toi, il y a 2-3ans...
 
Sinon oui, met le plus possible dans le root, je ne connais pas l'architecture de ton .fla...
Fais gaffe juste à tes linkage, si tu declare ta fonction dans le root, assure toi que ...
 
myColor = new Color(this.carre.unite);
myColor.setRGB(Couleur);
 
... vise le bon clip !
 
La methode, tu l'appel du root aussi (tu peux le faire de n'importe ou, le principe est de mettre un bon chemin...
Si ta fonction est declaré dans root et que tu veux l'appeler d'un sous-clip, alors tu devras faire : _root.coloRandom() ou _parent.coloRandom()


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°2014439
abais
Posté le 05-08-2010 à 12:46:17  profilanswer
 

Je viens de voir qu'en AS2, on instanciait un objet Color à partir de nombre  entre 0 et 1 pour les RVB...
Du coup, pour avoir une couleur au pif :
var maCouleur:Color = new Color(Math.random(),Math.random(),Math.random());
Bref...
Ça remet en cause ton script, la conversion en hexa devient inutile...


---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.
n°2014535
lxl ihsahn​ lxl
●⌠ Antaigris ⌡●
Posté le 05-08-2010 à 15:40:57  profilanswer
 

abais a écrit :

Je viens de voir qu'en AS2, on instanciait un objet Color à partir de nombre  entre 0 et 1 pour les RVB...
Du coup, pour avoir une couleur au pif :
var maCouleur:Color = new Color(Math.random(),Math.random(),Math.random());
Bref...
Ça remet en cause ton script, la conversion en hexa devient inutile...


 
Ah oui pas mal...
 
Bon faudra que je me mette à l'AS3, ça deviens urgent :/


---------------
[YouTube] Le Cerveau Lent : vulgarisation sciences cognitives ◦ [url=https://forum.hardware.fr/hfr/AchatsVentes/Photo-Audio-Video/vds-pentax-samyang-sujet_644991_1.htm]Vente Penta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  AS2 : Une histoire de couleurs...

 

Sujets relatifs
Graphique avec nuances de couleurs[AS2] remise a zéro de l'animation
Couleurs différentes google map Gtilelayer JSR 113 (JSAPI 2): On se rapproche à la fin de l'histoire?
Une histoire d'operateur[SHELL] Une histoire "pipe"
[RESOLU] [AS2] Chemin[Shell] If dans awk et histoire de NR
[AS2] liste défilante avec boutons[AS2] Modifier/Supprimer liens FLA
Plus de sujets relatifs à : AS2 : Une histoire de couleurs...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR