deux questions... chargement XML et faire apparaitre les elements

deux questions... chargement XML et faire apparaitre les elements - Flash/ActionScript - Programmation

Marsh Posté le 15-12-2005 à 13:14:36    

Premiere question :  
je fais un chargement XML, j'arrive à faire afficher mes vignettes sans probleme, mais quand je clique sur une vignette c'est la derniere qui est toujours prise en compte... voici le code pour l'affichage des vignettes :
 
[en résumé]
 

Code :
  1. for(i=0;i<document.firstChild.childNodes.length;i++)
  2.  {
  3.    _root.menu_items.thumb.duplicateMovieClip("thumb_"+i,_root.menu_items.getNextHighestDepth()+1);
  4.    this_new_mc=_root.menu_items["thumb_"+i];
  5.     imageName=document.firstChild.childNodes[i].childNodes[0].lastChild.nodeValue;
  6.     chargerThumb("thumbs/"+imageName,this_new_mc); // fait apparaitre la vignette
  7.     this_new_mc.onPress=function() // là c'est là qu'on clique pour faire afficher l'image.. et c'est là que ça deconne à mon avis
  8.     {
  9.      link=document.firstChild.childNodes[i].childNodes[1].childNodes[0].nodeValue;
  10.      //fait afficher l'image avec l'effet de slide
  11.      SlideMenu(link,"images/"+imageName,this);
  12.     }
  13.    this_new_mc._x=new_x_pos;
  14.    this_new_mc._y=new_y_pos;
  15.   if(perline>=2)
  16.   {
  17.    perline=1;
  18.   }
  19.   if (new_x_pos<100)
  20.   {
  21.    new_x_pos+=50;
  22.   }
  23.   else if (new_x_pos>=90)
  24.   {
  25.    new_x_pos=5;
  26.    new_y_pos+=50;
  27.   }
  28.    perline++;
  29.   }
  30.  }
  31. }


 
deuxieme question :
avec cette méthode j'ai toutes mes vignettes qui apparaissent en même temps... comment faire pour qu'elles se chargent les unes apres les autres ? (un peu comme le fait simpleviewer (si vous connaissez !))
 
 
voici l'anim (completement buggée mais faut bien avancer !!!) :
 
http://www.freedfromparis.com/essais/galerie
 
voici le fichier XML :
 
http://www.freedfromparis.com/essa [...] geData.xml


Message édité par freed102 le 15-12-2005 à 13:47:38

---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 13:14:36   

Reply

Marsh Posté le 15-12-2005 à 13:45:08    

Tu dois assigner une variable "link" interne à chacun de tes MCs ducpliqués
genre  

Code :
  1. _root.menu_items.thumb.duplicateMovieClip("thumb_"+i,_root.menu_items.getNextHighestDepth()+1);
  2. this_new_mc=_root.menu_items["thumb_"+i];
  3. this_new_mc.link = document.firstChild.childNodes[i].childNodes[1].childNodes[0].nodeValue;
  4. [...]
  5. this_new_mc.onPress=function() {
  6. SlideMenu(this.link,"images/"+imageName,this);
  7. }


 
A l'endroit où tu l'as mis ( dans le onPress ), il est "recalculé" dynamiquement quand tu cliques sur le thumbnail ... et comme tu as déjà bouclé dans tout les éléments de ton xml, i vaut fatalement toujours la valeur maxi à la sortie de la boucle ...

Reply

Marsh Posté le 15-12-2005 à 13:51:30    

Mr Mala a écrit :

Tu dois assigner une variable "link" interne à chacun de tes MCs ducpliqués
genre  

Code :
  1. _root.menu_items.thumb.duplicateMovieClip("thumb_"+i,_root.menu_items.getNextHighestDepth()+1);
  2. this_new_mc=_root.menu_items["thumb_"+i];
  3. this_new_mc.link = document.firstChild.childNodes[i].childNodes[1].childNodes[0].nodeValue;
  4. [...]
  5. this_new_mc.onPress=function() {
  6. SlideMenu(this.link,"images/"+imageName,this);
  7. }


 
A l'endroit où tu l'as mis ( dans le onPress ), il est "recalculé" dynamiquement quand tu cliques sur le thumbnail ... et comme tu as déjà bouclé dans tout les éléments de ton xml, i vaut fatalement toujours la valeur maxi à la sortie de la boucle ...


 
 
yesssss !!! ça marche !!!! génial !!! :) :bounce:


---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 13:57:18    

heuuuu oui d'accord mais .. tu as compris le "pq" au moins ? ;)

Message cité 1 fois
Message édité par Mr Mala le 15-12-2005 à 14:45:26
Reply

Marsh Posté le 15-12-2005 à 14:03:58    

me reste plus qu'à faire afficher les thumbs un par un (ça sert strictement à rien.. mais c plus joli ! lol !)
 
et puis à resizer mes jpg dans le movie clip pour que ça rentre dans ma scene


---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 14:04:34    

encore un copieur colleur ;)
 
je me demande si c'est pas a lui que j'avais essayé d'expliquer les prototypes...


---------------
D3
Reply

Marsh Posté le 15-12-2005 à 14:04:50    

Mr Mala a écrit :

heuuuu oui d'accord mais .. tu as compris le "pq" au moins ? ;)


 
euhhh... je crois mais c vrai que c pas bien clair.. je devrais plus me pencher sur la question


---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 14:07:34    

mechkurt a écrit :

encore un copieur colleur ;)
 
je me demande si c'est pas a lui que j'avais essayé d'expliquer les prototypes...


 
copieur colleur ??? ah non !! là j'ai rien copié collé justement !!! j'ai tout ecris moi même !
mon but était d'essayer de refaire un truc qui existe deja... c un bon exercice vous ne pensez pas ? je peux vous donner le fichier source si vous voulez pour que vous voyez mon code ragoutant de débutant ! lol !
 
le voici : http://www.freedfromparis.com/essa [...] index2.fla


---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 14:09:29    

je parlais de la solution que t'avais donné Mr Mala, t'énerve pas c'est pas un crime, on en voi tu sait ;)
 
si c'est pas a toi que je l'ai proposé, jette un oeil sur animal.fla:
http://mbillonlanfrey.free.fr/oldindex.html
c'est le premier truc que j'ai fait en Flash, il me semble que le code est commenté (presque trops mais c'était un tutoriaux pour mes collegues des beaux arts), je definit un prototype commun a tous mes clips, puis je les instancie en leur envoyant des parametres, cella me semble tout a fait approprié à  ta démarche de vignette.
 
soit indulgent sur l'absence totale d'optimisation, c'était juste un exercice comme ca  :hello:

Message cité 1 fois
Message édité par mechkurt le 15-12-2005 à 14:14:11

---------------
D3
Reply

Marsh Posté le 15-12-2005 à 14:12:10    

mmmmh bon:
Quand tu cliques sur la vignette, il exécute le jeu d'instruction inclu dans la fonction 'onPress' .. ok ?
Donc, il exécute l'assignation à la variable "link" avec la valeur "document.firstChild.childNodes[i].childNodes[1].childNodes[0].nodeValue;"
Or, à ce moment-là, i vaut combien ? ( en considérant que tu es sorti de la boucle for(i .. ) ) .. et en imaginant aussi que tu ne réaffecte pas cette variable autrepart !
 
Tu es en Flash 6, 7 ou 8 ? ...


Message édité par Mr Mala le 15-12-2005 à 14:45:08
Reply

Marsh Posté le 15-12-2005 à 14:12:10   

Reply

Marsh Posté le 15-12-2005 à 14:21:15    

bah justement je pensais que l'erreur venait du [i], vu qu'il m'affichait toujours le dernier.. je supposais qu'il utilisait le dernier increment du i.. et je savais pas comment l'eviter
 
je suis en flash 8


---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 14:22:32    

mechkurt a écrit :

je parlais de la solution que t'avais donné Mr Mala, t'énerve pas c'est pas un crime, on en voi tu sait ;)
 
si c'est pas a toi que je l'ai proposé, jette un oeil sur animal.fla:
http://mbillonlanfrey.free.fr/oldindex.html
c'est le premier truc que j'ai fait en Flash, il me semble que le code est commenté (presque trops mais c'était un tutoriaux pour mes collegues des beaux arts), je definit un prototype commun a tous mes clips, puis je les instancie en leur envoyant des parametres, cella me semble tout a fait approprié à  ta démarche de vignette.
 
soit indulgent sur l'absence totale d'optimisation, c'était juste un exercice comme ca  :hello:


non je m'enervais pas t'inquiet ! ;) !  je vais tej un noeil sur ton truc  ! moi les prototypes pour l'instant je sais même pas à quoi ça sert ! lol ! ça a l'air vachement interessant en tous cas !


---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 14:32:56    

ca sert que par exemple:

Code :
  1. //tu declare ton prototype:
  2. MovieClip.prototype.vignette = function(variable1, variable2, variable3) {
  3. //truc fait a l'initialisation
  4. this.variable1 = variable1;
  5. this.variable2 = variable2;
  6. this.variable3 = variable3;
  7. chargerThumb("thumbs/"+this.variable1,this_new_mc); // fait apparaitre la vignette
  8. this.onPress = function() {
  9. //faire un truc quand on clique
  10. SlideMenu(link,"images/"+this.variable2,this);
  11. }
  12. this.onEnterFrame = function() {
  13. //faire un truc toute les frames
  14. }
  15. }
  16. //et apres dans ta boucle xml tu fait:
  17. for(i=0;i<document.firstChild.childNodes.length;i++) {
  18. _root.menu_items.thumb.duplicateMovieClip("thumb_"+i,_root.menu_items.getNextHighestDepth()+1);
  19. this_new_mc=_root.menu_items["thumb_"+i];
  20. this_new_mc.vignette(document.firstChild.childNodes[i].childNodes[1].childNodes[0].nodeValue, document.firstChild.childNodes[i].childNodes[0].lastChild.nodeValue, unautretruc);
  21. this_new_mc._x=new_x_pos;
  22. this_new_mc._y=new_y_pos;
  23. if(perline>=2) {
  24. perline=1;
  25. }
  26. if (new_x_pos<100){
  27. new_x_pos+=50;
  28. } else if (new_x_pos>=90){
  29. new_x_pos=5;
  30. new_y_pos+=50;
  31. }
  32. perline++;
  33. }
  34. }
  35. }


---------------
D3
Reply

Marsh Posté le 15-12-2005 à 14:36:58    

par contre je comprends pas pouquoi il faut que je clique deux fois sur le bouton quand l'image n'a pas été deja chargée...


Message édité par freed102 le 15-12-2005 à 14:37:52

---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 14:42:30    

mechkurt a écrit :

ca sert que par exemple:

Code :
  1. //tu declare ton prototype:
  2. MovieClip.prototype.vignette = function(variable1, variable2, variable3) {
  3. //truc fait a l'initialisation
  4. this.variable1 = variable1;
  5. this.variable2 = variable2;
  6. this.variable3 = variable3;
  7. chargerThumb("thumbs/"+this.variable1,this_new_mc); // fait apparaitre la vignette
  8. this.onPress = function() {
  9. //faire un truc quand on clique
  10. SlideMenu(link,"images/"+this.variable2,this);
  11. }
  12. this.onEnterFrame = function() {
  13. //faire un truc toute les frames
  14. }
  15. }
  16. //et apres dans ta boucle xml tu fait:
  17. for(i=0;i<document.firstChild.childNodes.length;i++) {
  18. _root.menu_items.thumb.duplicateMovieClip("thumb_"+i,_root.menu_items.getNextHighestDepth()+1);
  19. this_new_mc=_root.menu_items["thumb_"+i];
  20. this_new_mc.vignette(document.firstChild.childNodes[i].childNodes[1].childNodes[0].nodeValue, document.firstChild.childNodes[i].childNodes[0].lastChild.nodeValue, unautretruc);
  21. this_new_mc._x=new_x_pos;
  22. this_new_mc._y=new_y_pos;
  23. if(perline>=2) {
  24. perline=1;
  25. }
  26. if (new_x_pos<100){
  27. new_x_pos+=50;
  28. } else if (new_x_pos>=90){
  29. new_x_pos=5;
  30. new_y_pos+=50;
  31. }
  32. perline++;
  33. }
  34. }
  35. }



 
ah ok.. je crois comprendre ! mais ça me fait le même effet que les classes.. je sais à quoi ça sert.. mais je sais pas quand les utiliser !


---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 14:53:36    

le prototype c'est quand même moins compliqué que les classes ;)
 
le truc c'est que a chaque fois que tu as plusieurs choses qui ont le même comportement (a qq variable pres), tu peux sans doute faire un prototype...


---------------
D3
Reply

Marsh Posté le 15-12-2005 à 14:59:14    

comment je peux connaitre la taille x et y de l'image chargée dans le clip ?
 
quand je fais ça :  
 
monClip_mcl.addListener(monEcouteurDeClip);
 
monClip_mcl.loadClip(url, _root.slide.contenu.image);
trace("taille de l'image : "+monClip_mcl._x);
 
il me reponds : taille de l'image : undefined ... normal.. c'est un objet !


Message édité par freed102 le 15-12-2005 à 15:00:44

---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 15:02:43    

en plus c même pas _x !! c'est _width ! quelle quiche ! lol


---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 15:14:13    

Quand tu charges une image dynamiquement, ses propriétés _width et _height ne sont mise à jour que quand il a fini de charger... avant, elles restent lamentablement à 0 ...
De plus, c'est pas sur monClip_mcl que tu dois jouer mais sur _root.slide.contenu.image !
Là, tu es une "double quiche" :p ... MCL n'est pas un MovieClip; il n'a donc ni de _x, ni de _width ! :p
 
Et puisque tu utilises un MCL, traite l'évènement onLoadComplete ( ce que tu fais probablement .. mais vu qu'on n'a pas le contenu de monEcouteurDeClip, on peut pas savoir ... )  
.. et là, ou à partir de là, tu pourras afficher la taille de ton image chargée ...


Message édité par Mr Mala le 15-12-2005 à 15:17:14
Reply

Marsh Posté le 15-12-2005 à 15:18:59    

c ce que j'ai fait ! hihi ! sauf que je l'ai pas mis dans le onLoadComplete mais dans le onLoadInit sinon ça s'affiche po !
 
monEcouteurDeClip.onLoadInit = function(cible)
  {
 _root.slide.loader.infos.text+="Le clip est maintenant utilisable!"+"\n";
 afficheClip();
  };


---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 15:32:34    

yess ça marchouille (apparement !!!)
 
http://www.freedfromparis.com/essais/galerie/


---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 15:39:35    

quand je clique sur une vignette rien ne se passe c'est normal ?


---------------
D3
Reply

Marsh Posté le 15-12-2005 à 15:41:15    

bah c le bug que je sais pas résoudre... il faut cliquer deux fois pour que l'image apparaisse quand elle n'est pas chargée !! c bizarre


---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 15:48:01    

c corrigé !!! :d:d:d j'avais mis deux fois onPress:
 
à l'appel de la fonction :
 

Code :
  1. this_new_mc.onPress=function()
  2.     {
  3.      SlideMenu(this.link,"images/"+this.imageName,this);
  4.     }


et dans la fonction :
 

Code :
  1. function SlideMenu(titre,page2load,btn){
  2. btn.onPress=function(){
  3. //blablabla
  4. }
  5. }


 
j'ai donc retiré le parametre "btn" de ma fonction qui ne sert plus à rien maintenant


Message édité par freed102 le 15-12-2005 à 15:49:11

---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 16:57:10    

par contre ya un truc chelou.. j'ai l'impression que mes images sont ecrasées parfois, voici mon code pour le resizing des images
 

Code :
  1. //dimensions de l'image d'origine
  2. oldheight=_root.slide.contenu.image._height;
  3. oldwidth=_root.slide.contenu.image._width;
  4. if(oldwidth>oldheight)
  5. {
  6. trace("formule 1 (w>h)" );
  7. // nouvelle taille (largeur) de l'image
  8. newwidth=400;
  9. _root.slide.contenu.image._width=newwidth;
  10. //calcule de la hauteur
  11. newheight=newwidth*oldheight/oldwidth;
  12. _root.slide.contenu.image._height=newheight;
  13. }
  14. else
  15. {
  16. // nouvelle taille (hauteur) de l'image
  17. newheight=350;
  18. _root.slide.contenu.image._height=newheight;
  19. //calcule de la hauteur
  20. newwidth=newheight*oldwidth/oldheight;
  21. _root.slide.contenu.image._width=newheight;
  22. }
  23. //dimensions du clip parent
  24. clipsize_x=_root.slide.contenu._width;
  25. clipsize_y=_root.slide.contenu._height;
  26. // calcule de la position horizontale
  27. new_x_pos=(clipsize_x/2)-(newwidth/2);
  28. _root.slide.contenu.image._x=new_x_pos;
  29. trace("nouvelle position horizontale : "+new_x_pos);
  30. // calcule de la position verticale
  31. new_y_pos=(clipsize_y/2)-(newheight/2);
  32. _root.slide.contenu.image._y=new_y_pos;
  33. trace("nouvelle position verticale : "+new_y_pos);
  34. trace("-------------------------------------------------------\n" );


---------------
Freed102
Reply

Marsh Posté le 15-12-2005 à 18:33:42    

j'ai trouvé mon erreur  
 
c'est  
 
newwidth=newheight*oldwidth/oldheight;
_root.slide.contenu.image._width=newwidth;
 
et pas  
 
newwidth=newheight*oldwidth/oldheight;
_root.slide.contenu.image._width=newheight;


---------------
Freed102
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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