Forum de discussion
Forum « Flash et Shockwave » (archives)
Re: Chargement avec barre de progression sous FlashMX : code d'exemple
Envoyé: 2 décembre 2004, 13h22 par dada
Je me demande où tu as pu aller chercher un tel ... (code?) bazard de téléchargement ?! J'ai jamais vu çà.
Sans parler de cette étrange quantité de "IF" dont je ne comprend pas le sens, je me demande aussi ce que peut signifier ce "loaded_bytes +=10000;".
Bref, çà parait être le résultat d'un travail sur Flash1 !! Du n'importe quoi...
Tout d'abord, tu devrais te mettre à lire l'aide de Flash, tu apprendras petit à petit comment on programme sous FlashMX.
Ensuite, en faisant une recherche avec le mot "chargement" sur ce forum, tu trouveras sûrement un certains nombre de renseignements utiles.
Je vais t'expliquer brièvement comment faire un pré-chargement, avec un code d'exemple :
D'après mon expérience, la meilleure méthode consiste à créer un SWF vide (ou presque) qui charge par LoadMovie le fichier SWF de ton site.
Appellons le SWF vide "chargeur.swf" et celui du site "site.swf".
Dans chargeur.swf, on va créer un clip "barre_mc" dans lequel on crée un rectangle fin en Y et large en X (une barre de chargement quoi). On prendras soin de placer le coin haut-gauche du rectangle sur le point 0 du clip, et de donner le nom d'occurence "barre_mc" à ce clip après l'avoir placé sur la scène.
Ensuite, on va créer une image clef sur la 2° image de la timeline (cf cette adresse pour savoir pourquoi la 2° image : http://www.trucsweb.com/Forum/voirmessage.asp?forumid=17&messageid=18877&posparent=5).
Et sur cette image clef, on va placer le code suivant :
---------------------------------------
// un stop pour éviter que la tête de lecture saute de 1 vers 2, etc...
stop();
// on réduit la barre à néant en X
this.barre_mc._xscale = 0;
// on créé un clip vide qui recevra le swf externe
this.createEmptyMovieClip("site", 1);
// on rend invisible ce clip en attente du chargement fini
this.site._visible = false;
// on charge dans ce clip un swf situé sur le disque dur dans le même répertoire
this.site.loadMovie("site.swf");
// On déclenche une boucle pour vérifier les bytes chargés
this.onEnterFrame = function() {
// on crée une variable 'percent' qui contient le pourcentage du site chargé
var pourcent = (this.site.getBytesLoaded()/this.site.getBytesTotal())*100;
// on déforme la barre du même pourcentage que le chargement en cours
this.barre_mc._xscale = pourcent;
// Si c'est chargé à 100%
if (pourcent>=100) {
// on efface la boucle enterFrame
delete this.onEnterFrame;
// on supprime de la scène la barre de chargement
this.barre_mc.unloadMovie();
// on rend visible le clip "site"
this.site._visible = true;
}
};
---------------------------------------
Visuellement, tu devrais voir la barre progresser jusqu'à la fin du chargement de site.swf.
Je me rend compte à l'instant qu'il n'y rien pour dire jusqu'où la barre ira au maximum. Donc, dans le clip barre_mc, on pourrait créer un autre clip "evolution_mc" dans lequel on mettra le rectangle ; et un autre "fixe_mc" dans lequel on peut mettre un autre rectangle vide, qui sera le contour de la barre. Dans ce cas, il faut remplacer dans le code "this.barre_mc" par "this.barre_mc.evolution_mc" (sauf pour this.barre_mc.unloadMovie();) afin de toujours correctement cibler notre rectangle de progression.
Si tu as besoin de précisions, n'hésites pas à demander mais penses d'abord à lire l'aide de Flash ; le dictionnaire ActionScript, même s'il comporte parfois de petites erreurs, est excellent pour apprendre Flash.
Pour revenir à ton code, est-ce que les IF ne servent pas à allumer ou éteindre 10 boutons en fonction du chargement ? Si c'est le cas, on peut remplacer tes quelques dizaines de lignes par 4 ou 5 lignes.
Franchement, donne ce code à manger à ta corbeille ;) elle ne demande que çà :)
++
dada
Réponses
|