TUTORIELS 
Un "preloader" en ActionScript sous Flash MX

Page 1 | 2 | 3

Indiquer à l'internaute le temps restant avant la fin du chargement d'une animation est essentiel: une méthode pour intégrer ce service dans vos propres créations.
 (25 mars 2003)
 

Le préchargement d'une animation Flash permet de respecter ses visiteurs en cas de lourd(s) fichier(s) à charger, en leur demandant de patienter et, accessoirement, en les distrayant par quelques informations ou animations. En cela, le terme "préchargement" n'est pas vraiment approprié, il s'agit plutôt d'une "animation d'attente avant l'animation principale", ou d'une "pré-animation".
De fait, il est quasiment toujours préférable de mettre un "preloader" dans chacune de ses animations, par simple respect pour le possible faible débit de la connexion de l'internaute. Pour donner une règle plus générale, il vaut mieux systématiquement mettre un preloader dès que le poids de l'ensemble des fichiers nécessaire à l'application/animation Flash dépasse les 50 Ko.

Il y a plusieurs méthodes pour aborder le préchargement:
- il est construit sur une poignée de premières images-clés au début de l'animation.
- il est placé dans une première scène à part des autres. A la fin du préchargement, le code renvoi vers une scène donnée.
- une "coquille vide" principale qui s'occupe de charger les autres fichiers de l'application.

Nous aborderons ici la première méthode, sous plusieurs angles (de très simple à élaboré).

Preloader basique
La base du preloader est de demander à l'utilisateur de patienter pendant que le programme charge. Nous n'avons donc besoin que d'afficher un message "Veuillez patienter pendant le chargement", et à lancer l'animation une fois le chargement terminé.

Partons du principe que vous avez déjà une animation terminée, et qu'il ne vous manque que le preloader. Créez un calque preloader. Déplacez toutes vos images-clés de deux images vers la droite. Pour ce faire, sélectionnez les premières images de tous les calques, et appuyez deux fois sur F5 (ou faites Insertion/Image). Déplacez enfin les quelques images-clés qui se trouvaient sur l'image 1 des calques d'un cran vers la droite avec la souris.
Votre calque preloader doit comporter maintenant deux images: une première image-clé vide, et une image vide. Placez sur l'image-clé un champ texte à l'aide de l'outil Texte. Mettez-le en "Texte statique", et écrivez par exemple "Veuillez patienter pendant le chargement".

Créez maintenant une image-clé vide sur la deuxième image de votre calque actions (créez-le le cas échéant), et le panneaux Actions. Entrez le code suivant:

(image-clé 2 du calque Actions)
if (_root.getBytesLoaded() < _root.getBytesTotal())
  {
  gotoAndPlay(1);
  }

...ou bien...

(image-clé 2 du calque Actions)
if (_root.getBytesLoaded() < _root.getBytesTotal())
  {
  prevFrame();
  play();
  }

Nous abordons ici deux fonctions cruciales pour tout preload: getBytesLoaded() et getBytesTotal(). Comme les anglophones l'auront compris, elle renvoient un entier indiquant le nombre d'octets chargés (pour getBytesLoaded()) ou la taille en octet de l'objet spécifié (ici, _root, donc l'animation principale) pour la seconde fonction.
La fonction gotoAndPlay(), pour sa part, indique à la tête de lecture de se placer sur une image donnée et de reprendre la lecture de l'animation. Etant donné que nous lui indiquons l'image précédente, nous pouvons tout aussi bien utiliser les deux fonctions prevFrame() (renvoi à l'image précédente) suivie de play() (joue l'animation). C'est un choix...
Notre expression if se lit donc comme suit: "si le nombre d'octets chargés est inférieur au nombre total d'octets, va à l'image précédente et joue l'animation". En clair, cela nous créé une boucle: la tête de lecture fera sans cesse l'aller-retour entre les images 1 et 2 sans jamais lancer l'animation (qui commence à l'image 3), et ce tant que la condition entre parenthèses est vraie. Une fois que l'animation a fini de se charger (c'est-à-dire, quand le nombre d'octets chargés et égal au nombre total d'octets), la tête de lecture n'a plus de raison de revenir en arrière, et elle continue donc sur sa lancée: l'image 3, où débute l'animation...

Pour une poignée d'informations
Il reste que notre preloader n'est guère passionnant pour le visiteur impatient: on ne sait pas par exemple quelle est la taille du fichier à charger...
Effacez le texte qui se trouve dans le champ texte, et mettez ce champ en "Texte dynamique". Nommez l'occurrence du champ "affichage".
Il ne vous reste qu'à remplacer le code ActionScript par le suivant:

(image-clé 2 du calque Actions)
if (_root.getBytesLoaded() < _root.getBytesTotal())
  {
  _root.affichage.text = "Chargement en cours: "
  + Math.floor(_root.getBytesLoaded())
  + " octets chargés sur "
  + Math.floor(_root.getBytesTotal())
  + " au total, soit "
  + Math.floor(_root.getBytesLoaded() / _root.getBytesTotal() * 100)
  + "%";
  gotoAndPlay(1);
  }

Notre preloader affiche maintenant des informations aux visiteurs, à savoir: le nombre d'octets chargés (via getBytesLoaded()), le nombre total d'octets (via getBytesTotal()), et le pourcentage d'octets chargés. Cette dernière information est calculée très simplement: on divise le nombre d'octets chargés par le nombre total d'octets, on multiplie le résultat par 100, et on tronque la résultat à l'aide de la méthode floor de l'objet Math.
Désormais, si on teste l'animation en affichant le train de lecture (ctrl-Envoi ou pomme-Envoi), on verra les différentes valeurs s'incrémenter, puis l'animation se lancer...

Page 1 | 2 | 3

 
[ Xavier Borderie,JDNet
 
Accueil | Haut de page