Problème avec un loadMovie en AS 2 (impossible d'exploiter des URL contenues dan

pit256 Messages postés 7 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 octobre 2009 - 17 sept. 2009 à 02:08
pit256 Messages postés 7 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 octobre 2009 - 22 sept. 2009 à 16:48
Salut

je suis entrain de réaliser une galerie d'images avec Flash et voilà mon probleme :
j'essaie d'exploiter des données stockées dans 3 tableaux à partir d'un fichier XML (l'URL des images, l'URL des vignettes et les légendes correspondantes). Le but étant de créer des MovieClips à la volée en piochant, à l'aide d'une boucle, des images dans un dossier externe.

Tout fonctionne bien pour les images et les légendes, mais impossible de récupérer les URL de chaque vignette...

Voilà le code (j'ai indiqué là où ça fonctionne et là où ça merde) :
...

url1 = new Array();
url2 = new Array();
légendes = new Array();

Fichier_XML = new XML();
Fichier_XML.ignoreWhite = true;
Fichier_XML.load("presse.xml");

Fichier_XML.onLoad = function(ok:Boolean) {
if (ok) {
x = Fichier_XML.firstChild;
for(i = 0; x.childNodes[i] != undefined; i++) { 
url1[i] = x.childNodes[i].attributes.url1; //trace(url1[i]);
url2[i] = x.childNodes[i].attributes.url2; //trace(url2[i]);
légendes[i] = x.childNodes[i].attributes.legende; //trace(légendes[i]);
}
}
};



this.createEmptyMovieClip("vignettes",0);

this.createEmptyMovieClip("zoom", 1);
zoom.createEmptyMovieClip("conteneurZ", 0);

for (var i = 0; i<nbr; i++) {
var mc = vignettes.createEmptyMovieClip("vignette"+i, i);
mc._x = (largeur+espace)*i;
mc.createEmptyMovieClip("conteneur",0);
mc.conteneur.loadMovie(url2[i]); // Ca marche pas !

mc.nombre = i;

mc.onRollOver = function() {
this._xscale this._yscale 105;
}

mc.onRollOut = function() {
this._xscale this._yscale 100;
}

mc.onRelease = function() {
legendesZoom.text = légendes[this.nombre]; // Ca marche !
zoom.conteneurZ.loadMovie(url1[this.nombre]); // Ca marche !

...



C'est délirant parce que les 3 tableaux sont correctement remplis, mais rien n'y fait, si je fais un trace(url2[i]) à cet endroit j'obtiens des "undefined"...

Merci de m'éclairer !
A voir également:

7 réponses

pit256 Messages postés 7 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 octobre 2009
19 sept. 2009 à 02:30
à vot' bon coeur !
0
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
21 sept. 2009 à 16:52
Salut,

pourrais-tu nous donner la structure de ton xml ?

merci.
http://liveplayaz.com
je suis heureux de faire partie d'une grande famille ...!
0
pit256 Messages postés 7 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 octobre 2009
21 sept. 2009 à 19:41
Salut,

En fait j'ai trouvé une solution...
Le problème venait du fait que le XML n'avait pas le temps d'être chargé avant l'exécution d'une bonne partie des autres instructions. Du coup j'ai séparé le script sur 2 frames, le premier pour le chargement du XML et le stockage dans les 3 tableaux, le deuxième pour la génération des clips et les événements. Puis j'ai placé un nextFrame() à la fin du if(ok), et ça roule...

Mais je suis pas entièrement satisfait...
J'aurai bien aimé que mon script fonctionne sur un seul frame. Ne serait ce que pour mieux comprendre la logique (l'ordre) d'exécution des instructions AS. Et puis c'est plus (pro)pre...

Mais peut être as-tu la solution ?

Voilà le code du frame 1 :

stop();

Stage.scaleMode = "noScale";

largeur = 70;
espace = 20;

//____________________________________________


url1 = new Array();
url2 = new Array();
legendes = new Array();

Fichier_XML = new XML();
Fichier_XML.ignoreWhite = true;
Fichier_XML.load("presse.xml");

Fichier_XML.onLoad = function(ok:Boolean) {
if (ok) {
x = Fichier_XML.firstChild;
for(i = 0; x.childNodes[i] != undefined; i++) { 
url1[i] = x.childNodes[i].attributes.url1; //trace(url1[i]);
url2[i] = x.childNodes[i].attributes.url2; //trace(url2[i]);
legendes[i] = x.childNodes[i].attributes.legende; //trace(legendes[i]);
}

nbr = i; // je stocke le nombre d'image décrites dans le XML
largeurTotale = nbr*(largeur+espace)-espace;
zone = 750;
extremeG = 50;
extremeD = zone-largeurTotale;

nextFrame();
}
};e


Voilà le code du frame 2 :

this.createEmptyMovieClip("vignettes",0);
vignettes._y = 535;
vignettes._visible = 0;

this.createEmptyMovieClip("zoom", 1);
zoom._y = 0;
zoom.createEmptyMovieClip("conteneurZ", 0);

loaderPress._visible = 0;

for (var i = 0; i<nbr; i++) {
var mc = vignettes.createEmptyMovieClip("vignette"+i, i);
mc._x = (largeur+espace)*i;
mc.createEmptyMovieClip("conteneur",0);
mc.conteneur.loadMovie(url2[i]); //trace(url2[i]); trace(i);

mc.nombre = i;

mc.onRollOver = function() {
this._xscale this._yscale 105;
}

mc.onRollOut = function() {
this._xscale this._yscale 100;
}

mc.onRelease = function() {
loaderPress._visible = 1;
legendesZoom._visible = 0;
legendesZoom.text = legendes[this.nombre]; //trace(legendes[this.nombre]);
zoom.conteneurZ.loadMovie(url1[this.nombre]); //trace(url1[this.nombre]);

zoom.onEnterFrame = function() {
    		total = this.conteneurZ.getBytesTotal();
    		charge = this.conteneurZ.getBytesLoaded();
    		pourcent = Math.round(charge/total*100);

    		if (pourcent == 100) {
        		delete this.onEnterFrame;
zoom._x = 800 - zoom._width - 25;
loaderPress.pourcentage = 100 + "/100";
this._alpha = 0;

zoom.onEnterFrame = function() {
this._alpha += 10;

if (this._alpha >= 100) {
delete this.onEnterFrame;
loaderPress._visible = 0;
legendesZoom._visible = 1;
}
}
    		}
else { loaderPress.pourcentage = pourcent + "/100"; } // fin if-else pourcent

} // fin boucle zoom

} // fin mc.onRelease

} // fin boucle for



//____________________________________________


vignettes._x = extremeG;

vignettes.onEnterFrame = function() {
var souris = _xmouse - 400;
var déplacement = Math.pow((souris/100),3);
if (this._x - déplacement < extremeG) {
if (this._x - déplacement > extremeD) {
this._x -= déplacement;
} else {
this._x = extremeD;
}
} else {
this._x = extremeG;
}
};

vignettes._visible = 1;





Voilà le XML :
<?xml version='1.0' encoding="UTF-8" ?>
<main>






















</main>


Et voilà ce que ça donne : Galerie

Merci de te pencher sur mon cas.
0
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
21 sept. 2009 à 22:36
Salut,

mettre ton script sur 2 frames c'est exactement comme creer une fonction qui fait le reste du code, mais que tu appelles dans la fonction onLoad

onne continuation
http://liveplayaz.com
je suis heureux de faire partie d'une grande famille ...!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pit256 Messages postés 7 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 octobre 2009
21 sept. 2009 à 23:58
Donc ce n'est pas sale ?!
0
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
22 sept. 2009 à 15:29
Salut,

non je ne trouve pas que ca l'est.

Bonne continuation.


http://liveplayaz.com
je suis heureux de faire partie d'une grande famille ...!
0
pit256 Messages postés 7 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 octobre 2009
22 sept. 2009 à 16:48
Merci, a+
0
Rejoignez-nous