problème de chemin ?

problème de chemin ? - Flash/ActionScript - Programmation

Marsh Posté le 30-01-2006 à 22:31:07    

salut les gens !
j'ai essayé de créer une galerie, mais depuis 15h je suis bloqué sur un truc : les liens associés à mes images !!!
normalement, le script va cercher les variables dans le xml, il affiche les images, qui doivent pointer vers un lien. Ce que je ne comprend pas, c'est que mon rollover marche bien !
voici le code, je sui désolé il n'y a pas de commentaires.
sur ma premiere image de mon premier calque
 

Code :
  1. movieClip.prototype.loadGalerieFromXml = function(file, zoneTaille, zoneHauteur, zoneEspace, affichage, nombre) {
  2. this.galerieXml = new XML();
  3. this.galerieXml.parent = this;
  4. this.galerieXml.ignoreWhite = true;
  5. this.galerieXml.onLoad = function() {
  6.  this.parent.zoneTaille = zoneTaille;
  7.  this.parent.zoneTaille = zoneHauteur;
  8.  this.parent.zoneEspace = zoneEspace;
  9.  this.parent.picsLoaded = true;
  10.  this.parent.affichage = affichage;
  11.  this.parent["nb"+affichage] = nombre;
  12.  this.parent.galeriev = this.firstChild.childNodes;
  13.  this.parent.lon = this.parent.galeriev.length;
  14. // pour le slide
  15.  var lon2 = this.parent.galeriev.length;
  16.  _root.onEnterFrame = function() {
  17.   _root.conteneur.long = (lon2*27-80)*(-1/86);
  18.  };
  19. // ca me sert à commaitre la hauteur du bidule
  20.  for (var i = 0; i<this.parent.lon; i++) {
  21.   var nom = this.parent.galeriev[i].attributes.nom;
  22.   this.parent.createEmptyMovieClip("bitmap_mc"+i, i+10);
  23.   this.parent["bitmap_mc"+i].loadMovie(nom);
  24.   this.parent["url"+i] = this.parent.galeriev[i].attributes.urls;
  25.   trace(this.parent["url"+i]);
  26.  }
  27.  this.parent.onEnterFrame = function() {
  28.   this.picsLoaded = true;
  29.   for (var i = 0; i<this.lon; i++) {
  30.    if (this["bitmap_mc"+i].getBytesLoaded() != this["bitmap_mc"+i].getBytesTotal() || this["bitmap_mc"+i].getBytesLoaded() == 0) {
  31.     this.picsLoaded = false;
  32.     break;
  33.    }
  34.   }
  35.   if (this.picsLoaded == true) {
  36.    trace("ok" );
  37.    this.onEnterFrame = null;
  38.    this.a = 0;
  39.    this.b = 0;
  40.    for (var i = 0; i<this.lon; i++) {
  41.     this["bitmap_mc"+i]._alpha = 30;
  42.     this["bitmap_mc"+i].onRollOver = function() {
  43.      this._alpha = 100;
  44.     };
  45.     this["bitmap_mc"+i].onRollOut = function() {
  46.      this._alpha = 30;
  47.     };
  48.     this["bitmap_mc"+i].onRelease = function() {
  49.      getURL(this["url"+i]);
  50.     };
  51. // c'est ici que ca coince ! et si je met trace(this["url"+i]); en dessous, bah ca marche ! (regardez) :
  52.     trace(this["url"+i]);
  53.     if (this.a == this["nb"+this.affichage]) {
  54.      this.a = 0;
  55.      this.b++;
  56.     }
  57.     this["bitmap_mc"+i]._x = (this.affichage == "Colonnes" ? this.a : this.b)*(this.zoneTaille+this.zoneEspace);
  58.     this["bitmap_mc"+i]._y = (this.affichage == "Colonnes" ? this.b : this.a)*(this.zoneHauteur+this.zoneEspace);
  59.     this.a++;
  60.    }
  61.    for (var i = 0; i<this.lon; i++) {
  62.     this.facteur = Math.max(this["bitmap_mc"+i]._width)/this.zoneTaille;
  63.     this.facteur = Math.max(this["bitmap_mc"+i]._height)/this.zoneHauteur;
  64.     this["bitmap_mc"+i]._xscale = this["bitmap_mc"+i]._yscale /= this.facteur;
  65.    }
  66.   }
  67.  };
  68. };
  69. this.galerieXml.load(file);
  70. };
  71. function go(destx) {
  72. _root.onEnterFrame = function() {
  73.  distpx = destx-conteneur._x;
  74.  _root.conteneur._x += distpx*(0.1);
  75.  if (Math.abs(distpx)<1) {
  76.   delete _root.onEnterFrame;
  77.  }
  78. };
  79. }
  80. _root.conteneur.tete.createEmptyMovieClip("galerie", 1);
  81. _root.conteneur.tete.galerie.loadGalerieFromXml("galerie.xml", 130, 25, 27, "Colonnes", 1);
  82. stop();


là en bas ca pointe vers tete, parce ce clip me sert à faire slider les images
si quelqu'un voit ce qui déconne, ou peut me conseiller un autre subterfuge (j'en ai essayé plein plein plein)...

Code :
  1. <gallerie>
  2.    <desc nom="1.jpg" urls="test1.html" />
  3.    <desc nom="2.jpg" />
  4.    <desc nom="3.jpg" urls="test2.html" />
  5.    <desc nom="4.jpg" urls="test3.html" />
  6.    <desc nom="5.jpg" urls="test4.html" />
  7.    <desc nom="6.jpg" urls="test5.html" />
  8. </gallerie>


le .fla à qui m'aidera...
 
merci


Message édité par an3k le 30-01-2006 à 22:34:49

---------------
An3k.com Création de sites web - mon tuto

Reply

Marsh Posté le 30-01-2006 à 22:31:07   

Reply

Marsh Posté le 31-01-2006 à 12:34:00    

trops le bordel ton code  :pfff:  
le prototype (release rollover) de tes boutons integres dans un this.parent.onEnterFrame verifiant la charge du truc (sauf que this.picsLoaded = true; donc ca sert a rien) lui même imbriqué dans le parsage du XML, c'est un peu le bordel, bien lourd, bien inutile et bien moche...
 [:airforceone]  
si j'ai un conseil à te donner c'est de separer le parsage du XML (instanciation des "bitmap_mc"+i application du prototype avec envoi en parametre de nom et url) et le prototype en lui même (comportement: chargement, release, rollover) de celui ci, car ton code doit pouvoir tenir en 15 20 lignes sans PB
 [:azitwaz]  
sinon tu ne dit pas quel est le PB ?
tes images s'affiche mais les liens ne sont pas cliquable ?


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

Marsh Posté le 31-01-2006 à 12:51:50    

mechkurt a écrit :

trops le bordel ton code  :pfff:  
le prototype (release rollover) de tes boutons integres dans un this.parent.onEnterFrame verifiant la charge du truc (sauf que this.picsLoaded = true; donc ca sert a rien) lui même imbriqué dans le parsage du XML, c'est un peu le bordel, bien lourd, bien inutile et bien moche...
 [:airforceone]  
si j'ai un conseil à te donner c'est de separer le parsage du XML (instanciation des "bitmap_mc"+i application du prototype avec envoi en parametre de nom et url) et le prototype en lui même (comportement: chargement, release, rollover) de celui ci, car ton code doit pouvoir tenir en 15 20 lignes sans PB
 [:azitwaz]  
sinon tu ne dit pas quel est le PB ?
tes images s'affiche mais les liens ne sont pas cliquable ?


j'ai récupèrer un e grande partie du code sur media-box.
et le soucis c'est bien que les liens ne fonctionnent pas, tandis que le roll over marche.


---------------
An3k.com Création de sites web - mon tuto

Reply

Marsh Posté le 31-01-2006 à 13:36:48    

j'ai récris le code (enfin j'ai choppé un script plus simple et j'ai modif)

Code :
  1. //Recupération des donnees du fichier xml
  2. var galeriev = galerieXml.firstChild.childNodes;
  3. //nombre d'image à placer
  4. var lon = galeriev.length;
  5. for (var i = 0; i<lon; i++) {
  6. //recupére le nom du fichier
  7. var nom = galeriev[i].attributes.nom;
  8. // Création d'un clip vide:  
  9. _root.conteneur.tete.createEmptyMovieClip("bitmap_mc"+i, i+10);
  10. //charge le jpeg
  11. _root.conteneur.tete["bitmap_mc"+i].loadMovie(nom);
  12. //on crée la variable contenant le lien
  13. _root.conteneur.tete["urls"+i] = galeriev[i].attributes.urls;
  14. }
  15. // Déplacement du clip conteneur:
  16. for (i=0; i<lon; i++) {
  17. //on crée des variables pour simplifier le truc
  18. var chemin = _root.conteneur.tete["bitmap_mc"+i];
  19. var varUrl = _root.conteneur.tete["urls"+i];
  20. //maintenant on dispose les images
  21. chemin._y = i*27;
  22. //on crée un lien et un rollOver, et on change l'opacité, uniquement si il existe un lien dans le xml
  23. if (varUrl != undefined && varUrl != null) {
  24.  chemin._alpha = 30;
  25.  chemin.onRollOver = function() {
  26.   chemin._alpha = 100;
  27.  };
  28.  chemin.onRollOut = function() {
  29.   chemin._alpha = 30;
  30.  };
  31.  chemin.onRelease = function() {
  32.   getURL(varUrl);
  33.  };
  34. }
  35. }
  36. stop();


cette fois y'a les commentaires ;)
mais là carément le roll over ne marche plus, et par cnséquent le lien non plus... [:sisicaivrai]
la zone entiere de l'image n'est plus cliquable


Message édité par an3k le 31-01-2006 à 13:48:10

---------------
An3k.com Création de sites web - mon tuto

Reply

Marsh Posté le 31-01-2006 à 14:14:19    

Code :
  1. //le comportement de mes images
  2. MovieClip.prototype.Slide = function(nb , nom, url) {
  3.     this.nb = nb ;
  4.     this.nom = nom;
  5.     this.url = url;
  6.     this.charge = false;
  7.     this._x = this.nb * 100;
  8.     this.loadMovie(this.nom);
  9.     this._alpha = 30;
  10.     this.onEnterFrame = function() {
  11.         if (!this.charge) {
  12.             //blah blah
  13.         } else {
  14.             //blah blah
  15.         }
  16.     }
  17.     this.onRelease = function() {
  18.         getURL(this.url);
  19.     }
  20.     this.onRollOver = function() {
  21.         this._alpha = 100;
  22.     }
  23.     this.onRollOut = function() {
  24.         this._alpha = 30;
  25.     }
  26. }
  27. //chargement du xml
  28. nb = 0;
  29. database = new XML();
  30. database.ignoreWhite = true;
  31. database.onLoad = function(done) {
  32.     if (done) {
  33.         currentnode = this.firstChild.firstChild;
  34.         while (currentnode.nodeName == "desc" ) {
  35.             nb++;
  36.             nom = currentnode.attributes.nom;
  37.             url = currentnode.attributes.url;
  38.             _root.createEmptyMovieClip("bitmap"+nb+"_mc" nb);
  39.             _root["bitmap"+nb+"_mc"].Slide(nb, nom, url);
  40.             currentnode = currentnode.nextSibling;
  41.         }
  42.     }
  43. };
  44. database.load("galerie.xml" );


le code n'est sans doute pas 100% fonctionnel (j'ai pas testé) mais vu la simplification, en partant de cette base tu devrais t'en sortir...


Message édité par mechkurt le 31-01-2006 à 17:17:01

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

Marsh Posté le 31-01-2006 à 14:54:40    

merci :)
mais j'ai un problème : il ne retourne pas bien les données xml...  il ne renvois que 4 noms, et 5 urls, alors que dans le cas présent j'ai 12 entrées dans le xml...


---------------
An3k.com Création de sites web - mon tuto

Reply

Marsh Posté le 31-01-2006 à 15:03:39    

il saute lesquels: les premieres, les dernieres, n'imp ?


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

Marsh Posté le 31-01-2006 à 15:11:49    

les premières


---------------
An3k.com Création de sites web - mon tuto

Reply

Marsh Posté le 31-01-2006 à 15:20:12    

le PB doit etre la : currentnode = this.firstChild.firstChild;
mets des trace(currentnode); pour voir dans la fenetre de sortie ce qui se passe...
 
peut etre aussi que tu as des noeuds mal ferme ou qui ne s'appelle pas desc...


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

Marsh Posté le 31-01-2006 à 15:56:58    

c'était le nb++
 
sinon bah j'ai pas l'impression qu'il execute le proto... aucune images, et quand je pet des trace() dans le proto il ne me renvoie rien :(
 
ca commence à devenir un peut tout compliqué pour une simple galerie :(
 
merci de ta patience en tous cas


Message édité par an3k le 31-01-2006 à 15:57:19

---------------
An3k.com Création de sites web - mon tuto

Reply

Marsh Posté le 31-01-2006 à 15:56:58   

Reply

Marsh Posté le 31-01-2006 à 16:09:37    

chez moi ca marche, envoie ton fla pour voir...


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

Marsh Posté le 31-01-2006 à 16:24:50    

Reply

Marsh Posté le 31-01-2006 à 16:38:16    

change deja ces 2 choses:
-> Flash player 7 actionscript 2 ( a cause du parsage XML)
-> dans mon code remplacer creatEmptyMovieClip par createEmptyMovieClip (j'ai tapé le code de memoire et sans coloration syntaxique, toi par contre en collant le code tu aurais dut t'en apercevoir.)..
par contre ton fla refuse de complier sur ma becane, je peux donc pas tester plus...


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

Marsh Posté le 31-01-2006 à 16:54:48    

je suis souvent inatentif à certains truc :D
même chose, il refuse toujours le rollOver et les liens...
je vais réécrire le code de zéro, on va voir.


---------------
An3k.com Création de sites web - mon tuto

Reply

Marsh Posté le 31-01-2006 à 17:04:26    

Code :
  1. //Recupération des donnees du fichier xml
  2. var galeriev = galerieXml.firstChild.childNodes;
  3. var lon = galeriev.length;
  4. //nombre d'image à placer
  5. _root.onEnterFrame = function() {
  6. //on envoie la hauteur au slide
  7. _root.conteneur.long = (lon*27-70)*(-1/76);
  8. //boucle
  9. for (var i = 0; i<lon; i++) {
  10.  //recupére les variables
  11.  var varNom = galeriev[i].attributes.nom;
  12.  var varUrl = galeriev[i].attributes.urls;
  13.  var chemin = _root.conteneur.tete["bitmap_mc"+i];
  14.  // Création d'un clip vide:  
  15.  _root.conteneur.tete.createEmptyMovieClip("bitmap_mc"+i, i+10);
  16.  //charge le jpeg
  17.  chemin.loadMovie(varNom);
  18.  //maintenant on dispose les images
  19.  chemin._y = i*27;
  20.  //on crée un lien et change l'opacité, si il existe un lien dans le xml
  21.  chemin._alpha = 30;
  22.  chemin.onRollOver = function() {
  23.   chemin._alpha = 100;
  24.  };
  25.  _root.conteneur.onEnterFrame = function() {
  26.   chemin.onRollOut = function() {
  27.    chemin._alpha = 30;
  28.   };
  29.   chemin.onRelease = function() {
  30.    trace(varUrl);
  31.   };
  32.  };
  33. }
  34. };


meme comme ca il ne veut pas...


---------------
An3k.com Création de sites web - mon tuto

Reply

Marsh Posté le 31-01-2006 à 17:22:15    

c'est pas par esthetisme que je te fait separer le prototype du  XML, quand tu fait un loadMovie sur un clip, tous le code qui lui est associé est écrasé (ou zappé c'est comme tu veux) pendant (ou juste apres) le chargement de l'image, par contre avec un proto ca fonctionne...
 
fait un mix entre ton code et ce que je t'ai deja donné en mettant des trace() toutes les lignes pour debugguer, tu vas y arriver...


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

Marsh Posté le 31-01-2006 à 17:26:14    

avant même que tu le marques j'en ai fait un. mais j'ai toujours pas de roll over


---------------
An3k.com Création de sites web - mon tuto

Reply

Marsh Posté le 31-01-2006 à 17:50:21    

est-ce qu'il ne faudrait pas définir la taille de la zone cliquable ?


---------------
An3k.com Création de sites web - mon tuto

Reply

Marsh Posté le 31-01-2006 à 18:05:51    

Si tu charges une image, c'est toutes l'images qui deviendras zone cliquable...
met un trace(nom+" / "+url); pour voir si les parametres passent bien au proto...


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

Marsh Posté le 31-01-2006 à 18:08:26    

oui ca passe (avec urls, puisque url est deja pris dans flash)
depuis hier déjà !
sauf qu'hier j'avais le rollOver mais pas le release, aujourd'hui j'ai plus aucun des deux :/
http://an3k.site.voila.fr/index.html


Message édité par an3k le 31-01-2006 à 18:09:41

---------------
An3k.com Création de sites web - mon tuto

Reply

Marsh Posté le 31-01-2006 à 18:29:53    

je comprend pas, j'ai jamais eu autant de probs avec un prog !!!
c'est encore plus bizarre si ca marche chez toi !
meme en créant un noueau fla, avec uniquement ton code, y'a pas le rollover, ni le lien. le prototype quand il dit this.rollOver ect... c'est pas valable que quand il est en train de se faire ?


Message édité par an3k le 31-01-2006 à 18:36:25

---------------
An3k.com Création de sites web - mon tuto

Reply

Marsh Posté le 31-01-2006 à 18:39:08    

Code :
  1. //le comportement de mes images
  2. MovieClip.prototype.Slide = function(nb , nom, url) {
  3.        trace(nb+" / "+nom+" / "+url);
  4.     this.nb = nb ;
  5.     this.nom = nom;
  6.     this.url = url;
  7.     this.charge = false;
  8.     this._x = this.nb * 100;
  9.        this.createEmptyMovieClip("vide_mc",this.getNexthighestDepth(););
  10.     this.vide_mc.loadMovie(this.nom);
  11.     this._alpha = 30;
  12.     this.onEnterFrame = function() {
  13.         if (!this.charge) {
  14.             //blah blah
  15.         } else {
  16.             //blah blah
  17.         }
  18.     }
  19.     this.onRelease = function() {
  20.         getURL(this.url);
  21.     }
  22.     this.onRollOver = function() {
  23.         this._alpha = 100;
  24.     }
  25.     this.onRollOut = function() {
  26.         this._alpha = 30;
  27.     }
  28. }


et avec ca comme proto ?


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

Marsh Posté le 31-01-2006 à 18:47:24    

ca marche nickel ! merci beaucoup.
en fait j'avais fait une zone cliquable hier aussi, mais j'avais pas réussi à lui faire passer les variables, je sais plus pourquoi !
bref, vraiment merci, et surtout pour la patience ;)


---------------
An3k.com Création de sites web - mon tuto

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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