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.
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.
|