Preload d'un SWF externe

jdeboer Messages postés 254 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 4 février 2006 - 2 déc. 2003 à 16:51
nicomusic Messages postés 5 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 14 août 2004 - 24 mars 2004 à 01:18
Voila,
Toujours en complete incomprehension vis a vis des prechargements !!!
Je veux charger un SWF externe et affiche un preloader pendant le chargement.
J ai donc ecrit dans le clip principal le code suivant :

stop();
createEmptyMovieClip("sego",0);
sego.onLoad = function() {trace("OK Charge")}
sego.loadMovie("questions.swf")
sego.stop();
total=sego.getBytesTotal();
courant=sego.getBytesLoaded();
pourcentage=Math.round(courant/total*100);

Le probleme est qu en testant le prechargement s effectue pas. L'anim principal s arrete bien mais par contre le clip "sego" joue alors que j ai mis la commande sego.stop(). De plus le trace "OK charger" n apparait pas lors du debogage (que je mette onLoad avant ou apres loadMovie c'est pareil). J ai aussi essaye _root.sego.stop() . Il semble que je puise pas agir sur le clip sego. Pourcentage renvoie a aucune valeur numerique. Bref, je comprends pas mon erreur, merci de votre aide.

2 réponses

theKam Messages postés 40 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 6 mars 2006
5 déc. 2003 à 01:31
Hé hé, c du brin, le onLoad.
En fait, dans ton code, tu définis une fonction onLoad, et dans la foulée tu fais un loadMovie.
Or, le loadMovie efface tous les paramaètres du movieclip dans lequel tu le fais. Donc il efface ton onLoad.
Tu vas me dire "ben ca sert à quoi, alors, onLoad".
Honnêtement, je sais pas.... :))

La solution que j'utilise et qui marche bien : faire une boucle sur un onEnterFrame qui met à jour ton pourcentage, mais aussi qui compare sego.getBytesTotal() et sego.getBytesLoaded()
Quand les deux sont identiques (et supérieurs a quelques octets, sinon au début ils sont tous les deux à 0), tu peux exécuter effacer l'onEnterFrame et passer à la suite : le préchargement est fini.

je viens de taper un exemple dans un message juste en dessous, mais le revoila :
this.createEmptyMovieCip("sego", 1) ;
this.sego.loadMovie("questiosn.swf") ;
this.onEnterFrame = function() {
var BL = this.sego.getBytesLoaded() ;
var BT = this.sego.getBytesTotal() ;
trace("Chargement : " + Math.round(BL*100/BT) + "%") ;
if (BL == BT && BL > 4) {
trace("a y est, c chargé !!!!!!!!!!!!!!") ;
this.onEnterFrame = undefined ;
}

}

Voili voila !

Kam
0
nicomusic Messages postés 5 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 14 août 2004
24 mars 2004 à 01:18
ouuuff !

Merci 1000 fois kam !!!

Cela fait 4 jours que je bataille à me demander pourquoi le preload que j'ai fait ne marche pas la première fois que mon flash est executé !!!

J'ai téléchargé tous les preloads des sources de ce site et de bien d'autres sites sans y voir plus clair....

Et l'astuce est là !! Dans ce thread !! : penser à rajouter à la condition cible.getBytesLoaded() == cible.getBytesTotal() que cible.getBytesLoaded() soit supérieur à quelque kilos !!!

même si vous chargez le clip "cible" dans un objet existant, le programme va mettre quelque dixiemes de secondes pour mettre à jour l'information de la nouvelle taille de l'objet, vous avez donc interret à mettre comme condition que cible.getBytesLoaded() soit supérieur à l'ancienne taille de l'objet qui l'heberge !

++
0
Rejoignez-nous