Les chargements... pour une galerie

Sentinel24 Messages postés 20 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 9 novembre 2009 - 3 nov. 2009 à 10:35
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010 - 9 nov. 2009 à 16:39
Salut à tous.

Voila mon soucis, je me débrouille pas mal en AS2, mais je reste un peu léger a propos du chargement.

Là je cherche à créer une galerie qui charge toutes ses images en externes, avec les liens dans un fichier texte (qui comprend aussi les titres, commentaires,...).
Et c'est fait et ça marche nickel:
http://24-design.fr/cazamajour/?p=137

LE soucis, c'est que la première fois que les images arrives, elles sautent car elles ne sont pas chargées.
Donc je voudrais faire un cargement qui me charge toutes ces images externes. Alors pour tester, je le fait juste avec un JPG bien lourd de mon disque. Le soucis c'est que quand je simule un téléchargement en local, en affichant les valeurs du téléchargement, il ne vas jamais jusq'au bout et hop, passe à la galerie. Comment cela se fait-il?

Merci de votre aide.

Voici mon code sur la première frame de ma galerie:

onClipEvent (load) {
_root.createEmptyMovieClip("preload1",1);
_root.preload1.loadMovie("terrot.jpg");
////// là c'est l'image de mon disque pour tester/////

}


onClipEvent (enterFrame) {
totalroot = _root.getBytesTotal();
loadedroot = _root.getBytesLoaded();
total1 = _root.preload1.getBytesLoaded();
loaded1 = _root.preload1.getBytesTotal();

total = totalroot+total1;
loaded = loadedroot+loaded1;

trace(total);
trace(loaded);


prc = loaded/total*100;
this._yscale = 100-prc;

if (prc == 100) {
this._alpha = 0;
gotoAndPlay(2);
}
if (prc<100) {
gotoAndPlay(1);
_root.textprc.text = (Math.round(prc))+"%";
}
}

19 réponses

Sentinel24 Messages postés 20 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 9 novembre 2009
5 nov. 2009 à 09:25
Svp les gars, j'en peux plus de tout tester pour que ça marche
0
Sentinel24 Messages postés 20 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 9 novembre 2009
5 nov. 2009 à 11:57
Nickel, j'ai trouvé la solution grace au code de crackter sur ce post:
http://www.flashkod.com/forum/sujet-PRELOAD-NE-CHARGE-PAS-TOTALITE-SWF_1369323.aspx

Merci beaucoup à toi crackter.


Voici le code modifié qui marche:
stop();
var conteneur:MovieClip = this.createEmptyMovieClip("conteneur", 1);
var ecouteur:Object = new Object();
var mcl:MovieClipLoader = new MovieClipLoader();
mcl.addListener(ecouteur);
mcl.loadClip("terrot.jpg",conteneur);

// quand le téléchargement commence
ecouteur.onLoadStart = function(target:MovieClip) {
loader._yscale = 0;
};
// quand le téléchargement progresse
ecouteur.onLoadProgress = function(target:MovieClip, loaded:Number, total:Number) {
prc = loaded/total*100;
loader._yscale = 100-prc;
_root.textprc.text = (Math.round(prc)+"%");
};
// quand le clip est chargé complètement
ecouteur.onLoadComplete = function(target:MovieClip) {
gotoAndPlay(2);
trace("top");
};
// quand une erreur de chargement arrive
ecouteur.onLoadError = function(target:MovieClip, errorCode:String) {
};
// quand le clip est chargé ET affiché
ecouteur.onLoadInit = function(target:MovieClip) {
};
0
Sentinel24 Messages postés 20 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 9 novembre 2009
5 nov. 2009 à 16:32
Bon par contre là je me retrouve sur un os, je n'arrive pas à faire boucler tout ça.

en gros, maintenant que ça marche, je voudrais qu'il charge 10 images.
Quelqu'un a une idée pour que boucle tout ça facilement?
sachant que les liens des images sont dans des variables "im1, im2, im3,...".

Merci à vous

Pierre
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
5 nov. 2009 à 18:50
salut,

tu peux utiliser un tableau (je ne réécrit pas tout) :

var mcl:MovieClipLoader.......
var mesImages:Array = new Array("url1.jpg","url2.jpg","url3.jpg",...);
var indexImage:Number = 0;

monBouton.onPress = function() {
 mcl.loadClip(mesImages[indexImage++],conteneur);
}
0

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

Posez votre question
Sentinel24 Messages postés 20 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 9 novembre 2009
6 nov. 2009 à 09:39
MERCI!!!!

Je n'y connais rien en tableau donc... ça aide pas à trouver une solution

Bon ça marche en effet si je rentre au préalable les variables à la main en début de code. Mais vu que l'intérêt de ma galerie est de le mettre tout en externe, je cherche maintenant a réussi à les appeler AVANT ce chargement.
Le soucis c'est que le temps qu'il charge le fichier txt et qu'il en extrait les valeurs, ça rate les 3ou 4 premières images.

J'ai essayer de mettre le chargement dans une fonction, mais curieusement ça l'empèche de bouclé.

aurais-tu une idée?


Voici mon code de ma première frame:
(le code de récupération des infos dans le txt était celui qu'un prof nous avais passé, mais je le trouve bien compliqué, je me demande si y'a pas plus simple).
stop();

mes_data6 = new LoadVars();
mes_data6.load(["http://www.24-design.fr/cazamajour/textes/packaging_s1.txt);

function traitement_data6(arg) {


var i = 1;
while (i<11) {
_root["article"+i] = new Array();
_root["article"+i] = arg["ligne"+i].split("#");
_root.zone_t.text += _root["article"+i][2]+"\n";

//Chargement du nombre max d'images
imagenb = _root["article"+i][0];
//Chargement de l'image
imagelight = _root["article"+i][1];
if (i == 1) {
imagelight = [imagelight+".jpg"];
}
_root["im"+i] = ["http://www.24-design.fr/cazamajour/"+imagelight];
if (imagenb != undefined) {
_root.imagenb = imagenb;
}
trace(_root["im"+i]);
i++;
if (i == 11) {
b = 1;
prc = 0;

}
}
}

mes_data6.onLoad = function(success:Boolean) {
traitement_data6(mes_data6);
};


var conteneur:MovieClip = this.createEmptyMovieClip("conteneur", 1);
var ecouteur:Object = new Object();
var mcl:MovieClipLoader = new MovieClipLoader();
var mesImages:Array = new Array(im1, im2, im3, im4, im5, im6, im7, im8, im9, im10);
var indexImage:Number = 1;
_root.conteneur._y = 400;

mcl.addListener(ecouteur);
mcl.loadClip(mesImages[indexImage++],conteneur);
trace(_root["im"+b]);

// quand le téléchargement commence
ecouteur.onLoadStart = function(target:MovieClip) {
loader._yscale = 0;
};
// quand le téléchargement progresse
ecouteur.onLoadProgress = function(target:MovieClip, loaded:Number, total:Number) {
prc = loaded/total*10;
_root.textprc.text = (((indexImage)*10)+(Math.round(prc))+"%");
loader._yscale = 100-_root.textprc.text;
trace(_root.textprc.text);

};
// quand le clip est chargé complètement
ecouteur.onLoadComplete = function(target:MovieClip) {
if (indexImage++<10) {
mcl.loadClip(mesImages[indexImage++],conteneur);
}
if (indexImage++>=10) {
gotoAndPlay(2);
trace("top");
conteneur._visible = false;
}
};
// quand une erreur de chargement arrive
ecouteur.onLoadError = function(target:MovieClip, errorCode:String) {
trace("ERROR");
};
// quand le clip est chargé ET affiché
ecouteur.onLoadInit = function(target:MovieClip) {
};


Merci
0
Sentinel24 Messages postés 20 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 9 novembre 2009
6 nov. 2009 à 11:04
Sinon, j'ai essayé de mettre le chargement des images en frame1, et le chargement en frame30, ce qui laisse le temps de charger les variables (ok c'est pas super élégant).
Mais là c'est le chargement qui ne boucle pas sur lui même, il ne se charge pas.
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
6 nov. 2009 à 12:44
est-ce que tu es limité à l'utilisation d'un fichier texte ou tu peux utiliser un xml ? car ça serait plus "élégant" :).

un fichier xml du style :

<?xml version="1.0" encoding="utf-8"?>
<fichiers>
 <fichier lien="url1.jpg" />
 <fichier lien="url2.jpg" />
 <fichier lien="url3.jpg" />
 ...
</fichiers>


et dans ton code as :

var mesImages:Array = new Array();
var monxml:XML = new XML();
monxml.ignoreWhite = true;
monxml.onLoad = onLoadXML;
monxml.load("monfichier.xml");

function onLoadXML(success) {
  if (success) {
    var i:Number = 0;
    while (monxml.firstChild.childNodes[i]<>undefined) {
      mesImages.push(monxml.firstChild.childNodes[i].attributes.lien);
      i++;
    }
  } else {
    trace("erreur chargement fichier xml");
  }
}


et après tu peux gérer mesImages comme je te le montre plus haut.
0
Sentinel24 Messages postés 20 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 9 novembre 2009
6 nov. 2009 à 12:48
J'essaie ça cette aprem. En effet ça a l'air beaucoup plus simple avec du xml. Je ne connaissais pas du tout.

Merci
0
Sentinel24 Messages postés 20 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 9 novembre 2009
6 nov. 2009 à 13:58
Salut.
J'ai créer mon fichier XML et essayer de placer ton code, mais je t'avoue que je suis pas su de moi sur ce coup vu que c'est la première fois que j'utilise des tableau et des xml.

Je te met le fichier FLA et XML ici:
http://24-design.fr/cazamajour/pourlesforums/

Est-ce que tu peux y jette un coup d'œil stp?

Merci d'avance, tu me sauve la vie
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
6 nov. 2009 à 16:27
re,

je préfèrerai que tu me dises les points où tu bloques plutôt que de devoir lire tout en vrac (j'ai pas trop le temps ).

Essaye d'aller le plus loin possible et dis moi dès que tu as une difficulté qui te semble trop compliquée.
0
Sentinel24 Messages postés 20 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 9 novembre 2009
6 nov. 2009 à 16:38
Ben justement la difficulté est dès le début comme je ne maitrise pas les tableaux.

voici le code de ma frame qui n'est pas bon:

//placement lightbox
_root.lightbox._x = 550;
_root.lightbox._y = 0;
premiereimage = "";
fichierseries = "_s1.txt";


stop();

//CHARGEMENT

var mesImages:Array = new Array();
var monxml:XML = new XML();
monxml.ignoreWhite = true;
monxml.onLoad = onLoadXML;
monxml.load("chargement.xml");

function onLoadXML(success) {
  if (success) {
    var i:Number = 0;
    while (monxml.firstChild.childNodes[i]<>undefined) {
      mesImages.push(monxml.firstChild.childNodes[i].attributes.lien);
      i++;
    }
  } else {
    trace("erreur chargement fichier xml");
  }
}





var conteneur:MovieClip = this.createEmptyMovieClip("conteneur", 1);
var ecouteur:Object = new Object();
var mcl:MovieClipLoader = new MovieClipLoader();
var indexImage:Number = 0;
_root.conteneur._y = 400;

mcl.addListener(ecouteur);
mcl.loadClip(mesImages[indexImage++],conteneur);
trace(mesImages[indexImage]);

// quand le téléchargement commence
ecouteur.onLoadStart = function(target:MovieClip) {
loader._yscale = 0;
};
// quand le téléchargement progresse
ecouteur.onLoadProgress = function(target:MovieClip, loaded:Number, total:Number) {
prc = loaded/total*10;
_root.textprc.text = (((indexImage)*10)+(Math.round(prc))+"%");
loader._yscale = 100-_root.textprc.text;
trace(_root.textprc.text);

};
// quand le clip est chargé complètement
ecouteur.onLoadComplete = function(target:MovieClip) {
if (indexImage++<10) {
mcl.loadClip(mesImages[indexImage++],conteneur);
}
if (indexImage++>=10) {
gotoAndPlay(2);
trace("top");
conteneur._visible = false;
}
};
// quand une erreur de chargement arrive
ecouteur.onLoadError = function(target:MovieClip, errorCode:String) {
trace("ERROR");
};
// quand le clip est chargé ET affiché
ecouteur.onLoadInit = function(target:MovieClip) {
};
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
6 nov. 2009 à 21:08
ha oui ok, en fait tu charges une image à peine tu as fini de charger la précédente, donc tu ne peux pas les voir vue qu'elle sont remplacées à chaque fois dans le conteneur.

Si tu veux précharger les images, tu dois créer autant de clip conteneur qu'il y a d'image, genre :

for (var i:Number=0;i<mesImages.length-1;i++) {
  this.createEmptyMovieClip("conteneur"+i,100+i);
  this["conteneur"+i]._visible=false;
}


et ensuite tu pourra les afficher comme bon te semble en faisant this["conteneur"+indexImage]._visible=true;
0
Sentinel24 Messages postés 20 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 9 novembre 2009
6 nov. 2009 à 23:57
ah oué....... la vache en 2 ligne c'est 20 fois plus simple que ce que j'ai pour créer mes galeries..

bon ben j'ai du boulot moi ce WE

Merci, je vais essayer de mettre tout ça en place.

Je te tiens au jus

Bon week-end et merci beaucoup
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
7 nov. 2009 à 04:11
ha oui tiens j'ai oublié la ligne pour charger les images dans les movieclip lol :

for (var i:Number=0;i<mesImages.length-1;i++) {
  this.createEmptyMovieClip("conteneur"+i,100+i);
  mcl.loadClip(mesImages[i],this["conteneur"+i]);
  this["conteneur"+i]._visible=false;
}


n'hésite pas si tu rencontres des soucis. bon we.
0
Sentinel24 Messages postés 20 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 9 novembre 2009
9 nov. 2009 à 09:31
Salut.

oué bon là je suis définitivement largué. A force de rajouter du code et tout, je m'y perd.

Alors on vas reprendre depuis le début.

1-Déjà, est ce que je met un stop(); à cette première frame?

2-Le chargement du fichier xml et des adresses des images:
var mesImages:Array = new Array();
var monxml:XML = new XML();
monxml.ignoreWhite = true;
monxml.onLoad = onLoadXML;
monxml.load("chargement.xml");

function onLoadXML(success) {
if (success) {
var i:Number = 0;
while (monxml.firstChild.childNodes[i]<>undefined) {
mesImages.push(monxml.firstChild.childNodes[i].attributes.lien);
i++;
}
} else {
trace("erreur chargement fichier xml");
}
}


for (var i:Number = 0; i<mesImages.length-1; i++) {
this.createEmptyMovieClip("conteneur"+i,100+i);
mcl.loadClip(mesImages[i],this["conteneur"+i]);
this["conteneur"+i]._visible = false;
}



Pourquoi ça merde?

Merci
0
Sentinel24 Messages postés 20 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 9 novembre 2009
9 nov. 2009 à 10:36
Petite mise au point, j'ai essayer d'adapté le code de chargement, mais ça marche pas. la faute à quoi? c'est simple, déjà y'a des soucis de timming
Si je fait tracé le nom des champs récupérés dans le XML et que je fait un trace indiquant le début des Movie clip, on se rend compte que d'an l'ordre du code, il envoie les images dans les MC, puis il les charge, puis il affiche enfin le nom des fichier. Donc normale que ça marche pas si il charge sans encore avoir les variables.

Voila donc mon code actuel:
stop();



//CHARGEMENT

var mesImages:Array = new Array();
var monxml:XML = new XML();
monxml.ignoreWhite = true;
monxml.onLoad = onLoadXML;
monxml.load("chargement.xml");

function onLoadXML(success) {
if (success) {
var i:Number = 0;
while (monxml.firstChild.childNodes[i]<>undefined) {
mesImages.push(monxml.firstChild.childNodes[i].attributes.lien);
trace(mesImages[i]);
i++;
}
} else {
trace("erreur chargement fichier xml");
}
}

trace("puis on balance");
for (var i:Number = 0; i<mesImages.length-1; i++) {
this.createEmptyMovieClip("conteneur"+i,100+i);
this["mcl"+i].loadClip(mesImages[i],this["conteneur"+i]);
this["conteneur"+i]._visible = true;
}


Comment faire pour qu'il ne commence à envoyer que quand il a finit de charger?

Merci
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
9 nov. 2009 à 13:34
Et bien tout simplement en ne créant les conteneurs que quand le xml est chargé, donc après ton while :


stop();

//CHARGEMENT

var mesImages:Array = new Array();
var monxml:XML = new XML();
monxml.ignoreWhite = true;
monxml.onLoad = onLoadXML;
monxml.load("chargement.xml");

function onLoadXML(success) {
if (success) {
var i:Number = 0;
while (monxml.firstChild.childNodes[i]<>undefined) {
mesImages.push(monxml.firstChild.childNodes[i].attributes.lien);
trace(mesImages[i]);
i++;
}
creerConteneursImages();
} else {
trace("erreur chargement fichier xml");
}
}

trace("puis on balance");
function creerConteneursImages() {
for (var i:Number = 0; i<mesImages.length-1; i++) {
this.createEmptyMovieClip("conteneur"+i,100+i);
this["mcl"+i].loadClip(mesImages[i],this["conteneur"+i]);
this["conteneur"+i]._visible = true;
}
}
0
Sentinel24 Messages postés 20 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 9 novembre 2009
9 nov. 2009 à 13:41
ah oué en effet c'est simple.

en parallèle, j'ai continuer à cherche un système plus simple et je suis tomber sur quelque chose de vraiment parfait:
http://wiki.mediabox.fr/tutoriaux/flash/xml/liste_images_2

Ça fait 1h que je suis dessus, ca marche nickel!!!!!!!

Y'a juste a ce que je finisse un ou deux ajustement et c'est finit ^^
L'avantage c'est que celui là est ultra simple pour qui ne connais pas les tableau.

en tout cas, merci beaucoup à toi, tu m'as appris deux ou trois astuces de programmation très utiles.

Pierre
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
9 nov. 2009 à 16:39
ce n'est ni plus ni moins ce que ton code fait déjà, sauf que ton code tu peux l'adapter à toute situation ;).

de rien pour l'aide, c'est le but :).
0
Rejoignez-nous