Moi je veux bien attendre une minute que l'image se charge, mais comment afficher l'état d'avancement ?
Pour cela, on va créer un chargeur (ou
preloader, en anglais dans le texte).
Je vais vous montrer deux méthodes de la classe
MovieClip.
getBytesLoaded et getBytesTotal
Ce sont sûrement les méthodes les plus simples à utiliser !
monclip.getBytesTotal() renvoie la taille en octets d'un clip
monclip.getBytesLoaded() renvoie en octets ce qui a été chargé du clip pour l'instant
Donc, si on veut connaître le pourcentage de chargement d'un clip, on fait :
Code : Actionscript | pourcentage = (unclip.getBytesLoaded() / unclip.getBytesTotal() ) * 100;
|
Chargeur texte
Voilà un code qui permet d'afficher la progression du chargement, la zone de texte se crée en haut à gauche de l'animation dynamiquement :
Code : Actionscript | lien = 'http://uploads.siteduzero.com/files/105001_106000/105747.jpg';
// On crée deux clips, un pour recevoir l'image, l'autre pour le preloader
this.createEmptyMovieClip('image', 1);
this.createEmptyMovieClip('chargeur', 2);
// On crée un champ de texte dans chargeur et on charge l'astronaute dans image
this.chargeur.createTextField('pourcentage', 1, 0, 0, 100, 20);
this.image.loadMovie(lien);
// On regarde à chaque image où en est le chargement
this.chargeur.onEnterFrame = function() {
this.pourcentage.text = (this._parent.image.getBytesLoaded()/this._parent.image.getBytesTotal())*100;
};
|
Ce code fonctionne, mais on ne peut pas dire que ce soit ce qu'il y a de plus beau ; on va donc lui apporter quelques améliorations :
- on ne va pas répéter 2 fois dans le code this._parent.image qui est trop long
- Il faut enlever les 13 chiffres après la virgule qui ne servent à rien !
- pourcentage.text est une variable de type String (= chaîne de caractères), et on lui donne un nombre, ce n'est pas très propre !
On va donc :
- créer une variable faisant référence à image, et la réutiliser ensuite.
- arrondir le nombre avec Math.round()
- convertir le nombre en texte avec toString()
Ce qui nous donne :
Code : Actionscript 1
2
3
4
5
6
7
8
9
10
11
12 | lien = 'http://uploads.siteduzero.com/files/105001_106000/105747.jpg';
// On crée deux clips, un pour recevoir l'image, l'autre pour le preloader
this.createEmptyMovieClip('image', 1);
this.createEmptyMovieClip('chargeur', 2);
// On crée un champ de texte dans chargeur et on charge l'astronaute dans image
this.chargeur.createTextField('pourcentage', 1, 0, 0, 100, 20);
this.image.loadMovie(lien);
// On regarde à chaque image où en est le chargement
this.chargeur.image = this.image;
this.chargeur.onEnterFrame = function() {
this.pourcentage.text = (Math.round(((image.getBytesLoaded()/image.getBytesTotal())*100)).toString())+' %';
};
|
- this.chargeur.image = this.image; permet de créer une référence à image directement dans le clip chargeur, et nous fait gagner du temps ensuite.
- Math.round(((image.getBytesLoaded()/image.getBytesTotal())*100)) arrondit le nombre.
- le_nombre.toString() convertit le nombre en texte, ce qui permet de rajouter le % à la fin de la chaîne de caractères.
Chargeur graphique
Le texte c'est bien, facile à programmer, mais c'est pas très esthétique.
On va donc dessiner une barre de progression. On pourrait la dessiner complètement en ActionScript, grâce aux méthodes de dessin qu'on avait vu, mais rassurez-vous, on va les dessiner nous-mêmes avec l'IDE de Flash.
Créez donc un clip sur la scène principale, et donnez-lui pour
nom d'occurrence :
chargeur
Dans ce clip, dessinez deux rectangles : ils doivent être de la même taille et se superposer ; celui du dessous devrait un peu déborder sur les côtés. Transformez celui du dessus en un clip auquel vous donnerez comme
nom d'occurrence :
barre. Placez le centre de
barre comme vous le souhaitez par rapport au rectangle, selon l'effet que vous souhaiterez obtenir.
Vous allez voir, on ne va presque rien changer dans le code précédent.
Il ne sert plus à rien de créer le clip chargeur, puisqu'on l'a déjà, donc on supprime la ligne.
Idem pour la zone de texte qui est devenue inutile, puisqu'on affiche la progression sous forme graphique.
On ne va plus affecter le pourcentage à la propriété
text d'une zone de texte, mais à la propriété
_xscale de
barre. On doit donc transmettre un nombre, on enlève donc le
% et le
tostring(). Éventuellement, on peut aussi enlever le
Math.round(), qui ne sert plus à grand chose non plus.
Ça nous donne donc :
Code : Actionscript | lien = 'http://uploads.siteduzero.com/files/105001_106000/105747.jpg';
// On crée un clip pour recevoir l'image
this.createEmptyMovieClip('image', 1);
// On charge l'astronaute dans image
this.image.loadMovie(lien);
// On regarde à chaque image où en est le chargement
this.chargeur.image = this.image;
this.chargeur.onEnterFrame = function() {
this.barre._xscale = (image.getBytesLoaded()/image.getBytesTotal())*100;
};
|