[résolu] Composant loader

Composant loader [résolu] - Flash/ActionScript - Programmation

Marsh Posté le 29-10-2008 à 19:50:48    

Bonjour,
 
je cherche à faire une galerie en flash, cependant j'ai quelques problèmes.
 
Ma galerie se compose de la sorte :  
             _ un composant loader grand, qui permet de voir l'image en grand
             _ 6 petit composants loader qui permettent d'afficher les images en petit
 
J'ai cependant plus que 6 images. J'ai donc créé un tableau contenant le lien vers chaque image, un bouton permet ensuite de changer les images  à afficher, c'est là où ça foire.
 
Voilà le code :  

Code :
  1. var tabgal:Array = new Array();
  2. tabgal[1] = "galerie/1.jpg";
  3. tabgal[2] = "galerie/2.jpg";
  4. tabgal[3] = "galerie/3.jpg";
  5. tabgal[4] = "galerie/4.jpg";
  6. tabgal[5] = "galerie/5.jpg";
  7. tabgal[6] = "galerie/6.jpg";
  8. tabgal[7] = "galerie/7.jpg";
  9. tabgal[8] = "galerie/8.jpg";
  10. tabgal[9] = "galerie/9.jpg";
  11. tabgal[10] = "galerie/10.jpg";
  12. tabgal[11] = "galerie/11.jpg";
  13. tabgal[12] = "galerie/12.jpg";
  14. tabgal[13] = "galerie/13.jpg";
  15. tabgal[14] = "galerie/14.jpg";
  16. tabgal[15] = "galerie/15.jpg";
  17. tabgal[16] = "galerie/16.jpg";
  18. tabgal[17] = "galerie/17.jpg";
  19. tabgal[18] = "galerie/18.jpg";
  20. tabval_1 = 1;
  21. tabval_2 = 2;
  22. tabval_3 = 3;
  23. tabval_4 = 4;
  24. tabval_5 = 5;
  25. tabval_6 = 6;
  26. gal1.contentPath = tabgal[tabval_1];
  27. gal2.contentPath = tabgal[tabval_2];
  28. gal3.contentPath = tabgal[tabval_3];
  29. gal4.contentPath = tabgal[tabval_4];
  30. gal5.contentPath = tabgal[tabval_5];
  31. gal6.contentPath = tabgal[tabval_6];
  32. auex.onPress = function() {
  33. if (tabval_6+6<19) {
  34.  tabval_1 = tabval_1+6;
  35.  tabval_2 = tabval_2+6;
  36.  tabval_3 = tabval_3+6;
  37.  tabval_4 = tabval_4+6;
  38.  tabval_5 = tabval_5+6;
  39.  tabval_6 = tabval_6+6;
  40. } else {
  41.  tabval_1 = 1;
  42.  tabval_2 = 2;
  43.  tabval_3 = 3;
  44.  tabval_4 = 4;
  45.  tabval_5 = 5;
  46.  tabval_6 = 6;
  47. }
  48. };


 
sachant que auex est mon bouton et que gal1 à gal6 sont les loader petit.
 
Sur chaque loader est ensuite défini la fonction permettant d'afficher l'image petite en image grande.
 
En fait les images de départ s'affichent et je peux les afficher en grand mais je ne peux pas changer la série de départ ( images 1 à 6).
 
Pourtant en mettant une fonction trace je m'aperçoit que les variables sont bien modifiées.


Message édité par ilundar le 01-11-2008 à 10:42:57
Reply

Marsh Posté le 29-10-2008 à 19:50:48   

Reply

Marsh Posté le 30-10-2008 à 04:08:59    

Faudrait que tu apprennes a utiliser les boucles quand meme :/
 

Code :
  1. var tabgal:Array = new Array();
  2. for(var i=1 ; i <=18 ; i++){
  3.    tabgal[i] = "galerie/"+i+".jpg";
  4. }


 
Ou dans le cas d'un tableau, encore mieux

Code :
  1. var tabgal:Array = new Array("0" );
  2. for(var i=1 ; i <=18 ; i++){
  3.    tabgal.push("galerie/"+i+".jpg" );
  4. }


 
Peut etre qu'en simplifiant ton code, on pourra comprendre ton probleme ;)


Message édité par Zedlefou le 30-10-2008 à 04:09:18

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

Marsh Posté le 30-10-2008 à 10:21:13    

Oui, c'est vrai. je ne connais les boucles mais il est vrai que ne maniant pas le l'action script depuis longtemps j'ai préféré écrire le tout sous forme détaillé.
Je remanie le tout et je poste le code ensuite.

Reply

Marsh Posté le 30-10-2008 à 13:25:29    

je n'arrive pas à synthétiser la partie définissant contentPath pour chaque loader.
Voilà ce que j'ai essayé de faire et qui ne marche pas :

Code :
  1. for (var i = 1; i<=6; i++) {
  2. myloader="gal"+i;
  3. myloader.contentPath=tabgal[i];


Message édité par ilundar le 30-10-2008 à 13:30:44
Reply

Marsh Posté le 30-10-2008 à 14:21:44    

Non, la tu definis la meme variable 6 fois.
A la place de ligne 2 et 3 tu mets
 
this["gal"+1].contentPath = tabgal[i];


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

Marsh Posté le 30-10-2008 à 14:36:40    

ok merci beaucoup mais maintenant je retombe sur le problème du départ, rien ne se passe quand je clic sur le bouton.
Pourtant j'ai appliqué la même technique :

Code :
  1. mybutton.onPress = function() {
  2.  this["gal"+i].contentPath = tabgal[i+6];
  3. };


Message édité par ilundar le 30-10-2008 à 15:17:31
Reply

Marsh Posté le 30-10-2008 à 16:23:16    

Finalement ça marche si je met l'action directement sur le bouton. Mais le problème c'est que le bouton ne marche qu'une fois
 
Voilà ce que j'ai tappé dans le bouton  

Code :
  1. on (press) {
  2. for (var n = 1; n<3; n++) {
  3.  for (var i = 1; i<=6; i++) {
  4.   this["gal"+i].contentPath = tabgal[i+n*6];
  5.   break;
  6.  }
  7.  if (n>2) {
  8.   this["gal"+i].contentPath = tabgal[i];
  9.   break;
  10.  }
  11. }
  12. }


 


Message édité par ilundar le 30-10-2008 à 17:08:30
Reply

Marsh Posté le 31-10-2008 à 03:15:46    

Je vois a peu pres, mais ce que je ne comprend pas, c'est l'action du bouton. Il est censé faire quoi ?


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

Marsh Posté le 31-10-2008 à 10:52:45    

Je me suis surement un peu embrouillé, je vais donc ré expliquer le fonctionnement général de la galerie.
 
Un tableau contient toutes les images.
6 composants loader affichent les images qu'ils ont puisé dans le tableau.
 
Or le tableau contient plus de 6 images, elles ne peuvent donc pas être toutes affichées en même temps.
Un bouton permet alors d'afficher 6 autres images.
 
Donc sur 12 images par exemples on a :
loader 1 ->image 1                                                           loader 1 ->image 7                                                  loader 1 ->image 1
loader 2 ->image 2            on appuie sur le bouton                loader 2 ->image 8       on appuie sur le bouton            loader 2 ->image 2
loader 3 ->image 3           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _¦\        loader 3 ->image 9    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _¦\     loader 3->image 3
loader 4 ->image 4           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _¦ >      loader 4 ->image 10   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _¦ >   loader 4 ->image 4
loader 5 ->image 5           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _¦/       loader 5 ->image 11    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _¦/    loader 5 ->image 5
loader 6 ->image 6                                                           loader 6 ->image 12                                                loader 6 ->image 6
 
 
 
Je pense ne pas pouvoir faire plus clair  :)

Reply

Marsh Posté le 31-10-2008 à 11:40:44    

Ok, je vois.
Moi ce que je ferais:

Code :
  1. mon_btn.gal_step = 0
  2. mon_btn.onRelease = function(){
  3.   for (var i = 1; i<=6; i++) {
  4.     this["gal"+i].contentPath = tabgal[i + this.gal_step * 6];
  5.   }
  6.    if(this.gal_step == 0){
  7.      this.gal_step = 1;
  8.   }else if(this.gal_step == 1){
  9.      this.gal_step = 0;
  10.   }
  11. }


Ce genre d'astuce est tres utile pour controler le statut de ton anim. Tu ajoutes une propriété a ton bouton qui démarre a 0. Une fois cliqué ca passe a 1 (si tu avais 18 ou 24 images, ca passerait a 2 puis 3) et ca repasse a 0 un fois que tu atteins le max (ici, le max c'est 1).

 

En une ligne ce code

Code :
  1. if(this.gal_step == 0){
  2.      this.gal_step = 1;
  3.   }else if(this.gal_step == 1){
  4.      this.gal_step = 0;
  5.   }


... donnerait ceci

Code :
  1. this.gal_step = (this.gal_step == 0) ? 1 : 0;


Si ta proprieté = 0, tu lui ajoutes 1. Sinon, tu la remets a 0.


Message édité par Zedlefou le 31-10-2008 à 11:41:13

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

Marsh Posté le 31-10-2008 à 11:40:44   

Reply

Marsh Posté le 31-10-2008 à 11:49:44    

merci beaucoup, je ne connaissais pas du tout ce genre de propriété. Effectivement, je pense que ça me servira souvent.

Reply

Marsh Posté le 31-10-2008 à 11:58:07    

Ce sont les prémices de la programmation objet.  
Tu as ton objet bouton, tu peux lui attribuer autant de propriété que tu veux (faut pas s'emmêler les pinceaux avec celles qui existent déjà: _alpha, _x etc ...)
C'est tres utile aussi pour générer des boutons a la volé.
Tu as 6 boutons par exemple. Tu veux leur donner des actions differentes. Tu les nommes btn1 a btn6 et ensuite

Code :
  1. for (var i = 1; i<=6; i++) {
  2.    this["btn"+i].id = i ;
  3.    this["btn"+i].onRelease = function(){
  4.       showId(this.id);
  5.   }
  6. }
  7. function showId(Pid){
  8. if(Pid == 1){
  9.   trace("Vous avez cliqué sur le premier bouton" );
  10. }else{
  11.   trace("Vous avez cliqué sur les autres boutons" );
  12. }
  13. }


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

Marsh Posté le 31-10-2008 à 12:46:23    

En fait j'ai essayé d'appliquer le code  

Code :
  1. 1. mon_btn.gal_step = 0
  2.    2. mon_btn.onRelease = function(){
  3.    3.   for (var i = 1; i<=6; i++) {
  4.    4.     this["gal"+i].contentPath = tabgal[i + this.gal_step * 6];
  5.    5.   }
  6.    6.    if(this.gal_step == 0){
  7.    7.      this.gal_step = 1;
  8.    8.   }else if(this.gal_step == 1){
  9.    9.      this.gal_step = 0;
  10.   10.   }
  11.   11. }


mais malheuresement il ne marche pas, j'ai bien essayé de modifier un certain nombre de chose mais rien n'y fait.  
Voilà le code en entier :

Code :
  1. var tabgal:Array = new Array("0" );
  2. for (var i = 1; i<=18; i++) {
  3. tabgal.push("galerie/"+i+".jpg" );
  4. }
  5. mon_btn.gal_step = 0;
  6. for (var i = 1; i<=6; i++) {
  7. this["gal"+i].contentPath = tabgal[i+mon_btn.gal_step*6];
  8. }
  9. mon_btn.onRelease = function() {
  10. for (var i = 1; i<=6; i++) {
  11.  this["gal"+i].contentPath = tabgal[i+this.gal_step*6];
  12. }
  13. if (this.gal_step == 0) {
  14.  this.gal_step = 1;
  15. } else if (this.gal_step == 1) {
  16.  this.gal_step = 0;
  17. }
  18. trace (mon_btn.gal_step);
  19. };


la fonction trace, m'affiche bien la variation de gal_step si elle est placé à cet endroit. Mais si je la place tout à la fin, elle ne m'indique de que gal_step=0. Je pense donc qu'il faut définir gal_step en tant que varaible publique, non ?

Reply

Marsh Posté le 31-10-2008 à 13:42:45    

Ah non, au temps pour moi. C'est un probleme de scope avec tes loaders.

 

Ce code devrait marcher:

Code :
  1. var tabgal : Array = new Array ("0" );
  2. for (var i = 1; i <= 18; i ++){
  3. tabgal.push ("galerie/" + i + ".jpg" );
  4. }
  5. mon_btn.gal_step = 0;
  6. for (var i = 1; i <= 6; i ++){
  7. this ["gal" + i].contentPath = tabgal [i + mon_btn.gal_step * 6];
  8. }
  9. mon_btn.onRelease = function ()
  10. {
  11. switchGal (this.gal_step);
  12. };
  13. function switchGal (step){
  14. trace (step);
  15. for (var i = 1; i <= 6; i ++){
  16.  this ["gal" + i].contentPath = tabgal [i + step * 6];
  17. }
  18. if (step == 0){
  19.  mon_btn.step = 1;
  20. } else if (step == 1){
  21.  mon_btn.step = 0;
  22. }
  23. }
 

Dans mon_btn.onRelease si tu fais trace(this) tu vas etre dans le bouton. Alors que si tu fais un trace(this) dans ta fonction switchGal tu vas voir que tu es sur la racine du fichier (_level0)


Message édité par Zedlefou le 31-10-2008 à 13:44:04

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

Marsh Posté le 31-10-2008 à 13:52:12    

Dsl mai ça ne change rien !

Reply

Marsh Posté le 31-10-2008 à 15:18:45    

Post le .fla pour voir


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

Marsh Posté le 31-10-2008 à 18:42:41    

Je n'ai pas posté le fichier sur lequel je travail mais une copie plus légère, sans éléments graphiques.
http://dl.free.fr/qXsJo9VZG

Reply

Marsh Posté le 01-11-2008 à 03:36:48    

Hum, hum. Ok, je me suis un peu gourré.
Faut remplacer ca
 if (step == 0){
 mon_btn.step = 1;
} else if (step == 1){
 mon_btn.step = 0;
}
 
par ca
 if (step == 0) {
  mon_btn.gal_step = 1;
 } else if (step == 1) {
  mon_btn.gal_step = 0;
 }


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

Marsh Posté le 01-11-2008 à 10:40:50    

Ok j'essaie ça tout de suite, en tout cas merci de l'attention que tu me porte !


Message édité par ilundar le 01-11-2008 à 10:41:05
Reply

Marsh Posté le 01-11-2008 à 10:42:35    

ça marche suepr bien ! Merci pour tout.

Reply

Marsh Posté le 01-11-2008 à 10:45:10    

De rien :jap:
J'espere que tu seras l'adapter pour que ca marche avec 18 images. ;)


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

Marsh Posté le 01-11-2008 à 13:38:46    

PAs de soucis, c'est déjà fait, j'ai compris le principe

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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