Tiens, en voilà un que j'ai fait, je viens de le retrouver (ctrl+c/ctrl+v) :
Code :
- //Déclaration des variables utilisées par la suite
- var sentinelle:Object = new Object();
- var mcLoader:MovieClipLoader = new MovieClipLoader();
- var conteneur:MovieClip = this.createEmptyMovieClip("conteneur", this.getNextHighestDepth());
- //Instructions réalisées pendant la progression du chargement des données
- sentinelle.onLoadProgress = function():Void{
- var bt:Number = conteneur.getBytesTotal();
- var bl:Number = conteneur.getBytesLoaded();
- var per:Number = ! bt ? 0 :Math.floor(bl/bt*100);
-
- affichage.text = per + " %";
- }
- //Instructions réalisées à la fin du chargement des données
- sentinelle.onLoadComplete = function():Void{
- affichage.text = "chargé !"
- conteneur.play();
- }
- mcLoader.addListener(sentinelle);
- mcLoader.loadClip("externe.swf", conteneur);
|
Pour tester, tu crées une scène vide avec un champ texte vide [dynamique, multiligne], dont le nom d'occurence sera "affichage" [panneau propriétés de flash]. Ensuite, tu enregistres le FLA dans un répertoire.
Dans ce même répertoire, tu crées un SWF nommé "externe.swf" assez lourd (avec une image de quelques mega par exemple) pour que tu puisses tester le preloader avec "ctrl+enter x2" de Flash [règlage de la simulation du débit via ctrl+b si nécessaire].
Le code est améliorable, en utilisant une variable pour le nom du fichier externe à charger, en créant le champ texte via du code, par exemple, afin de le rendre plus souple et réutilisable. Mais je n'ai pas voulu embrouiller inutilement.
Explication de texte :
On crée un MC vide afin de servir de conteneur (d'où son nom) au fichier externe (externe.swf) qui sera chargé dans la scène. Par défaut, il se place dans le coin supérieur gauche, mais il est possible de lui indiquer où se placer (via un peu plus d'instructions). Il se redimensionne automatiquement aux dimensions du SWF externe chargé.
Ensuite, on crée un movieClipLoader "MCloader", qui permettra d'effectuer les actions de chargement et d'écoute. A la fin du code, on lui indique une action de chargement, via "loadClip", et on lui attribue le listener "sentinelle".
Cet objet "sentinelle" permettra de rester vigilant face à ce qui se passera au sein de MCloader, qui est lié au conteneur. C'est quelque chose qui reste à l'écoute, en attente de mouvement. D'où le nom que j'ai choisi : "sentinelle", lol.
Tout le reste, c'est de la broutille. En gros, on s'adresse au listener (sentinelle, donc), pendant le chargement (onLoadProgress) et à la fin, une fois toutes les données chargées (onLoadComplete).
Maintenant, pour ta barre de progression, il suffit de te baser sur la variable "per" (pourcentage) afin d'aggrandir une barre que tu auras préalablement crée (avec un nom d'occurence), ou via du code (on peut dessiner via les API de Flash, c'est plus optimisé pour une barre simple, et pas forcément plus complexe à mettre en oeuvre).