[xml&flash8] un bandeau panoramique en AS et XML

un bandeau panoramique en AS et XML [xml&flash8] - Flash/ActionScript - Programmation

Marsh Posté le 02-03-2007 à 02:15:35    

bonsoir à tous,
d'apres un tuto, j'ai créé un bandeau panoramique qui boucle sur lui meme. Pour cela j'ai créé en AS 2 movie clips conteneurs qui comportent chacuns autant de movieclip qu'il y a d'images dans mon xml. Quand ma souris est du coté droit, les conteneurs défilent vers la droite et inversement vers la gauche.
Le probleme c'est quand je teste mon anim, flash plante (il me semble que c'est mauvais signe) ou me renvoie une alerte qui me préviens que le script va faire ramer l'application .
Voila mon code AS (sur l'image 1 de la scène 1)

Code :
  1. //on cree un objet XML
  2. var photo_xml: XML = new XML();
  3. photo_xml.ignoreWhite = true;
  4. photo_xml.onLoad = function(ok){
  5. if(ok){
  6.  //trace ("chargement réussi" ); ok
  7.  noeudRacine=photo_xml.firstChild;
  8.  noeuds=noeudRacine.childNodes;
  9.  //nombre de photo
  10.  nbPhotos=noeuds.length;
  11. }
  12. }
  13. /////////////////////////////////
  14. // appel du xml au chargement //
  15. photo_xml.load("bibliotheque.xml" );
  16. // creation objet
  17. _root.createEmptyMovieClip("conteneur01",1);
  18. //dans conteneur on cree autant de mc qu'il y a d'images
  19. for (i=0; i<=nbPhotos; i++){
  20. conteneur01.createEmptyMovieClip("evennement_mc"+i, i);
  21. loadMovie(img.attributes.chemin, "evennement_mc"+i);
  22. i++;
  23. }
  24. //idem avec le second:
  25. _root.createEmptyMovieClip("conteneur02",1);
  26. for (i=0; i<=nbPhotos; i++){
  27. conteneur02.createEmptyMovieClip("evennement_mc"+i, i);
  28. loadMovie(img.attributes.chemin, "evennement_mc"+i),
  29. i++;
  30. }
  31. //les variables
  32. var largeur_scene = 600;
  33. var largeur_conteneur = conteneur01._width;
  34. _root.onEnterFrame = function(){
  35. deplacement = _xmouse;
  36. deplacement = deplacement - (largeur_scene/2);
  37. deplacement = deplacement/20;
  38. conteneur01._x = conteneur01._x + deplacement;
  39. conteneur02._x = conteneur02._x + deplacement;
  40. //droite
  41. if(conteneur01._x>=largeur_scene){
  42.  conteneur01._x = conteneur02._x - largeur_conteneur;
  43.  }
  44. if(conteneur02._x>=largeur_scene){
  45.  conteneur02._x = conteneur01._x - largeur_conteneur;
  46.  }
  47. //gauche
  48.  if (conteneur01._x+largeur_image<=0){
  49.  conteneur01._x=conteneur02._x+largeur_conteneur;
  50.  }
  51.  if (conteneur02._x+largeur_image<=0){
  52.  conteneur02._x=conteneur01._x+largeur_conteneur;
  53.  }
  54. }//fin du enterframe
  55. stop();


 
 
le fichier xml
 s'appele bibliotheque :

Code :
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <galerie>
  3. <img num="1" nom="fly1" date="10/10/2007" legende="légende 1" chemin="images/a.jpeg" lien="http://www.google.fr">
  4. <img num="2" nom="fly2" date="10/10/2006" legende="légende 2" chemin="images/b.jpeg" lien="http://www.google.fr">
  5. <img num="3" nom="fly3" date="10/10/2005" legende="légende 3" chemin="images/c.jpeg" lien="http://www.google.fr">
  6. </galerie>


 
merci a tous ceux qui voudront bien me répondre.
 :jap:  
***^_^***
bonne nuit tout le monde

Reply

Marsh Posté le 02-03-2007 à 02:15:35   

Reply

Marsh Posté le 02-03-2007 à 14:50:54    

A vu de pif c'est une boucle for qui s'arrête jamais. Comme t'en a 2 avec comme paramétre "nbPhotos", il doit être undefined ou un truc comme ça.

 

Juste après
nbPhotos=noeuds.length;
rajoute
trace(nbPhotos);

 

et mets-en un aussi dans la boucle for.
trace("dans la boucle : "+nbPhotos);

 

Ca peut venir du XML tout simplement ou alors de la variable qu'il ne retrouve pas. Dans ce cas tu la passe en _global.


Message édité par Zedlefou le 02-03-2007 à 14:54:39

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

Marsh Posté le 02-03-2007 à 16:25:45    

en effet, rajoute var nbPhotos:Number; sur la toute première ligne. il va la trouver même si elle est hors du scope de onLoad, c'est une drôle de particularité d'implémentation de Flash, qui est logique dans le contexte membres/classes de l'AS2, illogique dans le contexte AS1/timeline, mais pratique.
 
vachement pratique pour faire ça :
 

Code :
  1. var me:MovieClip = this;
  2. foo = new XML();
  3. foo.onLoad = function(){
  4. // tiens, ça marche, mais ça devrait pas normalement...
  5. trace(me);
  6. // puisque le scope est pas bon:
  7. trace(this);
  8. }


 


Message édité par craps_youpla le 02-03-2007 à 16:35:35
Reply

Marsh Posté le 05-03-2007 à 22:48:16    

coucou ca marche!!!
merci pour le coup de pouce et surement à bientot car je sent que je suis pas sortie de l'auberge avec cette anim
a plus

Reply

Sujets relatifs:

Leave a Replay

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