Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Préchargement/Preload

Compatible ActionScript 2. Cliquer pour en savoir plus sur les compatibilités.

A quoi peut bien servir un préchargement/preload ? La question est simple, voire même inutile diront certains d'entre vous. Cet article est surtout la pour vous rappeler quelles sont les principales utilités que peuvent avoir un la gestion du chargement d'une animation au sein de flash.

Faire patienter l'utilisateur

Lorsque l'on charge des fichiers lourd, le preload est la pour faire patienter l'utilisateur. C'est un avantage de flash par rapport aux pages html classiques : on peut afficher à volonté le degré de chargement des données externes et indiquer à l'utilisateur que le site n'a pas planté

Mise en cache

On l'oublie trop souvent : le fait de charger une animation/fichier permet de stocker temporairement la donnée sur l'ordinateur de l'internaute (dans le cache justement). Cela nous permet, au prochain loadMovie/loadVars de récupérer ce fichier de manière quasi instantanée ! C'est un mécanisme qui prend toute son importance lorsque l'on commence à faire des applications/animations de niveau avancé. Plus d'informations ici !

Gestion des données

Beaucoup de débutants ont de la peine à comprendre qu'actionscript et un langage asynchrone. Ce que ca veut dire ? Lorsqu'on lance le chargement d'une animation/fichier, flash n'attend pas que le chargement soit terminé pour continuer le code… Ainsi cet exemple n'a aucune chance de fonctionner :

var lv:LoadVars = new LoadVars();
lv.load("monFichier.txt");
trace(lv.variableDuFichier); //undefined

Pour que cela fonctionne, il faut attendre que les données soit chargées dans flash. Et justement la classe LoadVars nous fourni les éléments qui nous sont utiles à ceci :

var lv:LoadVars = new LoadVars();
lv.onLoad = function(ok:Boolean):Void
{
   if (ok) { trace(this.variableDuFichier); }
   else { trace("Erreur lors du chargement"); }
}
lv.load("monFichier.txt");

Si vous voulez afficher les détails du chargement pour un fichier, le principe de fonctionnement est le même que celui-ci !

Gestion des MovieClip

Toujours dans la même lignée, lorsque l'on charge un MovieClip (donc une animation/image externe), celle-ci n'est pas disponible directement dans flash. C'est même beaucoup plus tordu que cela : lorsque l'animation/image arrive dans flash, le clip conteneur est effacé et recréé. Seule quelques propriétés (_x, _y, _xscale, _yscale) sont gardées mais toutes les autres sont effacées. Voici donc un exemple à ne pas faire :

var clip:MovieClip = this.createEmptyMovieClip("conteneur", 0);
clip.maVariable = "salut";
clip.loadMovie("animation.swf");
 
//lorsque l'animation arrivera dans flash, la variable "maVariable" sera effacée

C'est la ou le préchargement prend toute son importance !!! Lorsque l'on veut gérer un clip chargé extérieurement, nous allons utiliser la classe MovieClipLoader (issue de ce tutorial) :

var clip:MovieClip = this.createEmptyMovieClip("conteneur", 0); //clip conteneur
var mcl:MovieClipLoader = new MovieClipLoader(); //gestionnaire du chargement
 
var ecouteurChargement:Object = new Object(); 
ecouteurChargement.onLoadStart = function(target:MovieClip):Void { };
ecouteurChargement.onLoadProgress = function(target:MovieClip, loaded:Number, total:Number):Void { };
ecouteurChargement.onLoadComplete = function(target:MovieClip):Void { };
ecouteurChargement.onLoadInit = function(target:MovieClip):Void
{
   clip.maVariable = "salut"; //la le clip est dans flash, on peut attribuer des variables/actions dessus
 
   //notez que la ligne ci-dessous est strictement équivalante
   //car nous ne chargeons qu'un seul clip
   //target.maVariable = "salut";
};
ecouteurChargement.onLoadError = function(target:MovieClip, code:String):Void { trace("erreur"); }
 
mcl.addListener(ecouteurChargement);
mcl.loadClip("monswf.swf", clip);