loading systmatique sur chargement de JPEG externe : Flash

troudball

Membre actif
22 Juillet 2004
162
3
45
Potenza
www.samaritano.net
Bonjour à tous :)
Je me suis trop cassé la tete et je n'y suis toujours pas arrive :
je résume :
Site html 100% flash :
<HTML><EMBED src=index.swf></HTML> (&#233;court&#233;.)
dans cet index, il y a deux clip : "conteneurphoto" et "indexphoto".
Dans indexphoto j'ai des boutons , quand je clique sur ces boutons, j'affiche les photos (j'app&#232;le des JPG externes) dans "conteneurphoto". Pour &#231;&#224; il n'y a aucun probl&#232;me (loadMovieNum("troudball/galerie1/Alpes2.jpg",_root.conteneurphoto);)...

Mais comment puis-je faire en sorte de d&#233;clancher un loading dans conteneurphoto &#224; chaque fois que je charge un JPG externe ?

Merci d'avance pour vos r&#233;ponses ;)
 
Bin il te faut un petit code qui va calculer ce pourcentage de chargement et l'afficher par exemple dans un champ de texte dynamique, voire modifier la largeur d'une barre en fonction de ce pourcentage pour montrer le chargement.

Par exemple :

var ecouteurCharge:Object = new Object();
ecouteurCharge.onLoadStart = function(cible:MovieClip) {
loading_mc._visible=true;
loading_mc._xscale = 0;
pourcent_txt.text="0 %";
};
ecouteurCharge.onLoadProgress = function(cible:MovieClip, bytesLoaded:Number, bytesTotal:Number) {
loading_mc._xscale = Math.round(bytesLoaded/bytesTotal*100);
pourcent_txt.text=loading_mc._xscale+" %";
};
ecouteurCharge.onLoadComplete = function(cible:MovieClip) {
loading_mc._visible=false;
pourcent_txt.text="";
};
var image_mcl:MovieClipLoader = new MovieClipLoader();
image_mcl.addListener(ecouteurCharge);

et tu d&#233;clenche le chargement de tes jpeg dans image_mcl :
image_mcl.loadClip(nom_image+".jpg", image_mc);


nom_image est la variable qui contient le nom de ton fichier jpg &#224; charger.
loading_mc est le movieClip contenant ta barre de chargement.
pourcent_txt est le champ de texte dynamique qui affichera le pourcentage de chargement
 
  • J’aime
Réactions: molgow
Salut Jeanba3000 ;) et merci pour ta réponse...
si j'ai bien compris, image_mcl.loadClip(nom_image+".jpg", image_mc); je le met dans le onclic relatif au bouton?

Sinon concernant le code suivant.
Bloc de code:
 var ecouteurCharge:Object = new Object();
 ecouteurCharge.onLoadStart = function(cible:MovieClip) {
   loading_mc._visible=true;
   loading_mc._xscale = 0;
   pourcent_txt.text="0 %";
 };
 ecouteurCharge.onLoadProgress = function(cible:MovieClip, bytesLoaded:Number, bytesTotal:Number) {
   loading_mc._xscale = Math.round(bytesLoaded/bytesTotal*100);
   pourcent_txt.text=loading_mc._xscale+" %";
 };
 ecouteurCharge.onLoadComplete = function(cible:MovieClip) {
   loading_mc._visible=false;
   pourcent_txt.text="";
 };
 var image_mcl:MovieClipLoader = new MovieClipLoader();
 image_mcl.addListener(ecouteurCharge);
ou dois-je le mettre : sur la frame mon conteneurphoto ou sur le clip coteneur photo?

Merci d'avance pour l'aide :up:
 
plusieurs options : soit tu charges tes images en avance et les fait afficher instantanément à chaque clic du visiteur, soit tu les charges à la demande et le visiteur doit attendre à chaque image pour qu'elle s'affiche, soit tu lances le chargement de tes images en avance et tu les mets à disposition dès qu'elles sont chargées comme ça l'internaute peut rapidement les voir.

image_mcl.loadClip(nom_image+".jpg", image_mc);
peut effectivement être traité en événement de bouton (onclic n'existe pas, onRelease plutôt).

Ce code se met à la racine de ton animation, sur la première image clé. Il faut bien sûr adapter les éventuels chemins vers les bons movieClips de ton animation.

image_mcl est le movie clip créé par programmation pour accueillir tes images, il remplace ton "conteneur photo". Par défaut il est situé dans le coin haut gauche de ton animation, il faut peut-être que tu le replaces au bon endroit par programmation.
 
Salut jeanba3000 et encore merci pour ton aide ;)

Bon, je reste sur ma faim car cela ne me semble pas si compliqu&#233; &#224; mettre en oeuvre mais je me rends compte de mes lacunes concernant les notions de classes....
Bref, j'aurai besoin de quelques pr&#233;cisions :D :

si j'ai bien compris, les clip loading_mc, pourcent_mc, et image_mcl se cr&#233;ent automatiquement par la programmation ? je n'ai pas besoin de cr&#233;er un clip avec la barre de loading sur 100 frames?

Ensuite, comme je te l'ai expliqu&#233;, j'ai donc le clip principale, que j'ai nom&#233; index.swf dans lequel j'avais cr&#233;&#233; un clip nom&#233; conteneurphoto (pour acceuillir les photos jpeg), un autre clip dans index s'app&#232;le "dock" dans le quel je charge les clips externes contenant les boutons des miniatures des photos qui doivent s'afficher dans mon "conteneurphoto", en fait je te met le lien suivant, c'est surement plus simple de voir pour s'en rendre compte (clic sur brice guezet &#224; gauche, puis sur galerie2, et ensuite sur les miniatures pour afficher les photos) : http://www.samaritano.net/sitebis/index.html
(C'est &#224; peu pr&#232;s le r&#233;sultat que je souhaite obtenir, pour l'exemple, j'ai cr&#233;&#233; pour chaque photo un movieclip int&#233;grant pour chacun sa barre de loading, je charge donc des swf externes dans "conteneurphoto" et non des jpeg externes comme je le souhaiterai, ce qui est un travail trop long et plus lourd en byte)

Mais si j'ai bien compris, mon "conteneurphoto" ne sert &#224; rien avec le script que tu m'as donn&#233; puisque image_mcl est cr&#233;&#233; &#224; chaque fois que image_mcl.loadClip(nom_image+".jpg", image_mc);

voici ce que j'ai donc essay&#233; :
dans mon index.swf &#224; la premi&#232;e frame j'ai coll&#233; le code :
Bloc de code:
 var ecouteurCharge:Object = new Object();
 ecouteurCharge.onLoadStart = function(cible:MovieClip) {
   loading_mc._visible=true;
   loading_mc._xscale = 0;
   pourcent_txt.text="0 %";
 };
 ecouteurCharge.onLoadProgress = function(cible:MovieClip, bytesLoaded:Number, bytesTotal:Number) {
   loading_mc._xscale = Math.round(bytesLoaded/bytesTotal*100);
   pourcent_txt.text=loading_mc._xscale+" %";
 };
 ecouteurCharge.onLoadComplete = function(cible:MovieClip) {
   loading_mc._visible=false;
   pourcent_txt.text="";
 };
 var image_mcl:MovieClipLoader = new MovieClipLoader();
 image_mcl.addListener(ecouteurCharge);
et dans mon clip externe des miniatures, sur le bouton, j'ai mis :
Bloc de code:
on (release) {
  _root.image_mcl.loadClip("brice/Gal1b1/Alpes3.jpg", _root.image_mc);
      }
peux-tu me dire ou je me suis tromp&#233; ? car j'ai fait diff&#233;rents test mais rien n'y... la photo ne s'affiche pas...

Merci d'avance :)
A+
 
Minute papillon, je ne suis pas &#224; ta disposition !

Je crois que tu mets la charrue avant les b&#339;ufs, il te faudrait peut-&#234;tre apprendre les bases pour bien comprendre ce que tu fais...

ton loading_mc n'est pas cr&#233;&#233; dynamiquement, tu le fais comme tu veux avec le graphisme que tu veux. Typiquement c'est juste un rectangle dans un movieClip d'une seule image-cl&#233;. Le code va l'afficher &#224; un pourcentage de sa largeur correspondant au pourcentage de chargement. Cette barre est globale, elle sert pour tous les chargement, c'est l'int&#233;r&#234;t de ce code. Pareil pour le champ de texte pourcent_txt que tu mets &#224; proximit&#233; de la barre. En gros, regarde mon site perso pour voir comment &#231;a fait.

Sinon, au temps pour moi, j'ai fait une petite erreur (&#231;a fait longtemps que je n'avais pas remis le nez dans le code de mon site), c'est pas image_mcl qui est le clip cible du chargement d'image, mais image_mc, celui qui est &#224; la fin de ton action de bouton. C'est un movieClip vide pr&#233;alablement cr&#233;&#233; et plac&#233; au bon endroit.

Avec &#231;a, tout devrait rentrer dans l'ordre.
 
Excuse moi Jeanba3000, c'est vrai que je suis un peu pressé :D ,
Cà fait déjà pas mal de temps que je suis sur ce projet et cette difficulté de loading pour un jpeg (qui me ferra faire bon pour la conception des sites) est la dernière grosse dificulté que je dois affronter pour mettre le site online, je sents qu'avec toi je tiens le bon bout et j'avais eu peur que mon sujet passe aux oubliettes tellement les nouveaux sujets arrivent en pagail sur le forum de macgeneration...:)
Mea Culpa :zen:
Je vais tester, et je reviens pour te tenir au courrant, si çà marche, je t'érige une statue dans mon jardin :king:

En tout cas merci encore pour ton aide ;)
A+
 
Re, :)
J'ai donc cr&#233;&#233; dans index.swf:
* un movieclip "loading_mc" avec nom d'instance "loading_mc"
* un texte dynamique avec nom d'instance "loading_txt" plac&#233; dans la premi&#232;re frame
* Un clip vide avec nom d'instance "image_mc" que j'ai plac&#233; dans la premi&#232;re frame
J'ai donc coll&#233; le script dans la premi&#232;re frame

enfin dans un bouton de dock.swf (qui charg&#233; en externe dans index.swf), j'ai mis le code suivant :
Bloc de code:
    on (release) {
  _root.image_mcl.loadClip("brice/Gal1b1/Alpes3.jpg", _root.image_mc);
      }
L&#224;, je ne sais plus ou je me suis plant&#233;, tout a l'air coh&#233;rent... :nailbiting: mais &#231;&#224; ne fonctionne toujours pas... Ne serait-ce pas une question de version de flash (MXpro 2004 7.0) ou d'actionscript 1.0 ou 2.0 ?

A+
 
Question : pourquoi tes boutons sont dans un swf externe ? Quelle est l'utilit&#233; ?

Tu charges o&#249; ce movieClip de boutons ?
Si c'est dans un movieClip conteneur &#231;a devrait marcher, si c'est dans un niveau sup&#233;rieur, c'est normal que &#231;a ne marche pas, _root. fait r&#233;f&#233;rence &#224; la racine de ce niveau, pas celle de ton swf principal, &#224; ce moment l&#224; il faut cibler _level0.
 
http://www.samaritano.net/sitebis/index.html
(C'est çà mon projtet, à peu près le résultat que je souhaite obtenir, pour l'exemple, j'ai créé pour chaque photo un movieclip intégrant pour chacun sa barre de loading, je charge donc des swf externes dans "conteneurphoto" et non des jpeg externes comme je le souhaiterai, ce qui est un travail trop long et plus lourd en byte)
mes boutons de miniatures photos sont donc présents dans un clip "dock.swf" externe que je charge dans un conteneur dans le clip principale "index.swf"

à part çà j'ai essayé le level0 de la manière suivante :
Bloc de code:
on (release) {
  _level0.image_mcl.loadClip("brice/Gal1b1/Alpes3.jpg", _level0.image_mc);
      }

mais çà n'a rien changé...

sinon j'ai essayé çà :
Bloc de code:
on (release) {
    if(_root.image_mc == Number(_root.image_mc)){
        loadMovieNum("brice/Gal1b1/Alpes3.jpg",_root.image_mc);
    } else {
        _root.image_mc.loadMovie("brice/Gal1b1/Alpes3.jpg");
    }
et çà fonctione à merveille... évidement sans cette fameuse barre de loading...

Mais ou donc est le problème??? :rateau:

A+
PS : splendide ton site perso :up:
 
En voyant ton site, je crois qu'il y a pas mal de soucis de conception &#224; la base, et de choix techniques douteux qui en d&#233;coulent. L'ergonomie est &#224; mon avis &#224; revoir, et globalement je trouve que la lourdeur des chargements est disproportionn&#233;e par rapport &#224; ce que le site donne. Il faut vraiment que tout ce qui est structurel soit le plus l&#233;ger et efficace possible au profit du contenu.

Ton bandeau sup&#233;rieur, fondamentalement accessoire puisque c'est de l'habillage, pas du contenu, doit s'afficher le plus rapidement possible, m&#234;me si les images suivantes ne sont pas encore charg&#233;es. Je pense qu'une barre de chargement pour cette partie n'a aucun sens. &#199;a me parait tr&#232;s tr&#232;s lourd pour une poign&#233;e d'images. Si ces images ne doivent pas ou rarement varier, pourquoi les traiter en externe ? Les images ne sont peut-&#234;tre pas optimis&#233;es au mieux, et leur animation trop lourde. La faire en programmation devrait l'all&#233;ger drastiquement.

La navigation de gauche dispara&#238;t lorsqu'on clique sur une photo et on doit revenir &#224; l'accueil pour choisir quelqu'un d'autre. C'est &#224; mon avis une erreur de ne pas la garder. L&#224; non plus, une barre de chargement sp&#233;cifique n'est pas utile.

Une seule barre de chargement est r&#233;ellement utile : pour le chargement du contenu, pas de la structure (navigation, bandeau, habillage...) qui doit &#234;tre la plus l&#233;g&#232;re possible, ou alors le chargement de cette structure doit &#234;tre compris dans le chargement de la premi&#232;re page.

Ensuite, dans une galerie, tu mets une autre navigation en pied de page avec un effet loupe &#224; la OS X diff&#233;rent de tes autres syst&#232;mes de navigation (le gauche et le menu sous le bandeau haut). C'est &#224; mon avis un gadget sans r&#233;elle valeur ajout&#233;e, qui prend de la place et des ressources processeur. Enfin bon, chacun fait comme il veut n'est-ce pas. J'imagine (j'esp&#232;re) que si rien d'autre ne se charge dans la galerie, c'est parce que tu ne l'as pas encore programm&#233; ?

Bref, encore beaucoup de travail, et je crois sinc&#232;rement qu'une r&#233;flexion globale t'am&#232;nera a des solutions plus simples, l&#233;g&#232;res et efficaces.

Pour la barre de chargement, je ne sais pas trop, je vais me replonger dans les m&#233;andres de mon code pour voir s'il ne manquerait pas quelque chose, mais d'une mani&#232;re g&#233;n&#233;rale, ma barre sur mon site fonctionne lors du chargement complet d'une page, pas pour un d&#233;tail seulement.
 
Salut Jeanba3000,
Je suis tout a fait d'accord avec tout ce que tu as dit, c'est vrai que les éléments sont très lourd pour ce qu'il y a charger, et c'est pour çà qu'il faut absolument que j'arrive déjà à saisir comment ne faire qu'une barre de loading que j'appèle à chaque foisque je veux charger un élément... Pour l'instant chaque animation a sa propre barre de loading, ensuite, c'est vrai que le bandeau pourrait etre plus légé ou optimisé mais il est aussi vrai que pas mal d'éléments sont présents à titre indicatifs, je les optimiserai plus tard...
D'un autre coté, ce site est un chantier, tu pourras le juger un peu plus objectivement quand je le metterai online officiellement :), mais il est sure que toutes tes remarques sont tirées du bon sens.

Bloc de code:
Bref, encore beaucoup de travail, et je crois sincèrement qu'une réflexion globale t'amènera a des solutions plus simples, légères et efficaces.
c'est fort possible mais je tiens à essayer pas mal de solutions avant...

Bloc de code:
Ton bandeau supérieur (...)la faire en programmation devrait l'alléger drastiquement.
Si tu as une piste je suis preneur mais comme tu l'as surement déjà induit, je ne suis pas un grand codeur, ceci étant dit j'apprends de jour en jour ...

Enfin en ce qui concerne ton code, j'ai essayé pas mal de ciblage pour le bouton, meme si le _root est de toute évidence celui qui fonctionne car çà marche (sans le loading) avec :
Bloc de code:
on (release) {
         _root.image_mc.loadMovie("brice/Gal1b1/Alpes3.jpg");
     }

J'ai exporté en flash 7, AS2 mais rien n'y fait...c'est un peu frustrant cartout devrait fonctionner pourtant...

En tout cas merci encore pour ta disponibilité ;), je crois que je vais devoir affronter ce problème en faisant une refonte totale de la structure comme tu me l'as suggéré, çà m'aidera à avoir les idées un peu plus claires :) car modifications sur modifications + choix de structure douteux pourrait bien etre responsable du non-fonctionnement de tout code....

A+