TUTORIELS 
Flash 7 : utilisation de MovieClipLoader()
Flash MX 2004 offre une nouvelle manière de charger des fichiers externes, à la fois plus simple et plus puissante. Présentation.  (13 novembre 2003)
 

Depuis le début de Flash, les graphistes/développeurs ont toujours dû jongler avec diverses fonctions et propriétés : d'abord les aller/retour entre deux images clés à grand renfort de If Frame Is Loaded et de Tell Target, puis (comme nous le montrons dans notre article "Un preloader en ActionScript sous Flash MX") en utilisant .getBytesLoaded() et .getBytesTotal() - et nous ne parlons pas de ces développeurs qui ont tenté de créer un système complet de préchargement pour de multiples fichiers SWF, JPG ou XML...
Pour résumer, le préchargement dans Flash a toujours été un petit cauchemar dès que l'on voulait faire élégant, modulable et à grande échelle.

C'est suite aux appels des développeurs que Macromedia a construit la classe qui nous intéresse ici dans Flash MX 2004 (et 2004 Pro, et le FlashPlayer du même cru) : MovieClipLoader(), dont le but est de faciliter le chargement de fichiers externes, et la mise à jour de l'information envoyée au visiteur à ce propos.

Description
Cette classe expose un nombre de classes et de méthode qui la rende beaucoup plus utile que LoadMovie():

Classe MovieClipLoader()
Méthodes / Evenements
Description
.loadClip()

.unloadClip()
Permet de lancer le chargement d'un fichier SWF ou JPG par le biais de la classe de chargement.
Retire de la scène un clip chargé via .loadClip().



.onLoadComplete()

.onLoadError()
.onLoadInit()

.onLoadProgress()
.onLoadStart()
Ensemble d'événements utilisables dans un écouteur suite à l'utilisation de .loadClip().
Ils se déclenchent
...
- ...quand le fichier a été entièrement téléchargé (il n'est pas utilisable pour autant!)
- ...quand un fichier n'a pas pu être chargé.
- ...quand la première image du clip chargé a été lue. Permet donc de déterminer quand le clip est effectivement utilisable.
- ...à chaque octet chargé.
- ...quand la demande de chargement a été lancée.
.addListener()
.removeListener()
Permettent de créer/supprimer des fonctions qui s'activent au cours du chargement.
.getProgress()
Renvoie un objet contenant les entiers bytesLoaded et bytesTotal. Evite d'avoir à passer par .onProgress()...

Application
Cet exemple permet de montrer le cheminement à suivre pour charger une image JPG.

var monClip_mcl = new MovieClipLoader();
var monEcouteurDeClip = new Object();

monEcouteurDeClip.onLoadStart = function(cible)
  {
  trace("Demande de chargement enregistrée!");
  };

monEcouteurDeClip.onLoadProgress = function(cible, loadedBytes, totalBytes)
  {
  trace("Octets chargés = " + loadedBytes);
  trace("Octets à charger = " + totalBytes);
  }

monEcouteurDeClip.onLoadComplete = function(cible)
  {
  trace("Chargement terminé!");
  };

monEcouteurDeClip.onLoadInit = function(cible)
  {
  trace("Le clip est maintenant utilisable!");
  };

monEcouteurDeClip.onLoadError = function(cible, codeErreur)
  {
  trace("Une erreur est servenue lors du chargement" + codeErreur);
  };

monClip_mcl.addListener(monEcouteurDeClip);

monClip_mcl.loadClip("monClip.swf", monClip_mc);

On note qu'il faut avoir complètement défini les différentes fonctions correspondant aux évènements du chargement avant de lancer celui-ci.

Nous avons déjà un clip vide (une coquille) sur la scène, nommé monClip_mc, qui sera remplacé/rempli par le fichier SWF qui nous nous apprêtons à charger.

Discutez en sur les forums

Après avoir défini notre objet monClip_mcl, qui s'occupera du chargement, nous créons l'objet monEcouteurDeClip, qui servira de réceptacle pour tous les écouteurs à définir. Ce second objet est ensuite attaché à monClip_mcl via la méthode .addlistener().

On s'occupe ensuite définir les comportements attachés à chaque évènement. Ici, nous n'avons fait que lancer des messages à l'aide de la fonction trace(), mais nous aurions tout aussi bien pu initialiser des valeurs ou lancer d'autres fonctions...

Une fois l'ensemble de nos méthodes définies, nous pouvons charger tous les fichiers que nous voulons par un simple appel :

monClip_mcl.loadClip("monClipA.swf", _root.clipA_mc);
monClip_mcl.loadClip("monClipB.swf", _level2.clipB_mc);
monClip_mcl.loadClip("/swf/monClipC.swf", _root.clipC_mc);
monClip_mcl.loadClip("http://site.com/123.jpg", _root.clipD_mc);
monClip_mcl.unloadClip(_level2.clipB_mc);

Plus lisible et plus compacte que son pendant loadMovie, MovieClipLoader permet donc aussi d'avoir un plus grand contrôle sur le déroulement du téléchargement, notamment grâce à la gestion des erreurs.

 
[ Xavier BorderieJDNet]
 
Accueil | Haut de page