Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Préchargement de l'animation principale

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

Lorsque vous voulez charger votre animation principale (donc le véritable _root de tout votre site), vous ne pouvez pas passer par MovieClipLoader. Il faut donc faire un préchargement “manuel” si on peut dire. Pour ce faire, vous aurez besoin de 2 frames dans votre fla principal. La 1ère sera votre préchargement, la seconde pourra s'occuper de charger tout le restant de votre site (variables, swf, images, …).

Vous avez ce tutorial qui explique comment précharger un clip externe sur le même principe (mais il est généralement préférable d'utiliser un MovieClipLoader) !

Code

Sans plus attendre allons-y ! Pour commencer nous allons créer (sur la 1ère frame donc) une fonction qui va s'occuper de gérer notre chargement :

var root:MovieClip = this; //ciblage (pour le scope)
var checkLoading:Function = function(Void):Void
{
   //récupération des bytes
   var total:Number = root.getBytesTotal(); //bytes total
   var loaded:Number = root.getBytesLoaded(); //bytes chargés
 
   var ratio:Number = loaded/total*100; //calcul du %age
   //ratio = Math.floor(ratio); //si vous voulez arrondir les %age
 
   //ici vous pouvez afficher les % dans un textfield,
   //faire avancer une barre de loading etc
 
   //lorsque l'animation est totalement chargée
   if (ratio == 100)
   {
      root.play(); //avance à la frame 2
   }
};
 
stop(); //on s'arrete sur la 1ère frame

Maintenant, nous allons faire en sorte que cette fonction soit appelée toutes les 20ms pour vérifier notre chargement. Nous allons utiliser un interval :

var interval:Number = setInterval(this, "check", 20);

Il nous suffit ensuite, lorsque l'animation est chargée d'arreter cet interval :

clearInterval(interval);

Au final le code complet (Flash MX 2004 - Flash 8) :

var root:MovieClip = this; //ciblage (pour le scope)
var checkLoading:Function = function(Void):Void
{
   //récupération des bytes
   var total:Number = root.getBytesTotal(); //bytes total
   var loaded:Number = root.getBytesLoaded(); //bytes chargés
 
   var ratio:Number = loaded/total*100; //calcul du %age
   //ratio = Math.floor(ratio); //si vous voulez arrondir les %age
 
   //ici vous pouvez afficher les % dans un textfield,
   //faire avancer une barre de loading etc
 
   //lorsque l'animation est totalement chargée
   if (ratio == 100)
   {
      clearInterval(interval); //arrete l'appel de la fonction
      root.play(); //avance à la frame 2
   }
};
 
//appel de la fonction check toutes les 20 ms
var interval:Number = setInterval(this, "checkLoading", 20);
 
stop(); //on s'arrete sur la 1ère frame

Code complet pour Flash MX :

var root = this; //ciblage (pour le scope)
var checkLoading = function()
{
   //récupération des bytes
   var total = root.getBytesTotal(); //bytes total
   var loaded = root.getBytesLoaded(); //bytes chargés
 
   var ratio = loaded/total*100; //calcul du %age
   //ratio = Math.floor(ratio); //si vous voulez arrondir les %age
 
   //ici vous pouvez afficher les % dans un textfield,
   //faire avancer une barre de loading etc
 
   //lorsque l'animation est totalement chargée
   if (ratio == 100)
   {
      clearInterval(interval); //arrete l'appel de la fonction
      root.play(); //avance à la frame 2
   }
};
 
//appel de la fonction check toutes les 20 ms
var interval = setInterval(this, "checkLoading", 20);
 
stop(); //on s'arrete sur la 1ère frame

Note

Si votre swf est lourd (déconseillé) et que le loading n'apparait pas tout de suite (ou très rapidement), vérifiez les points suivants :

  • La liaison (linkage) des objets dans votre bibliothèque. S'il y en a qui sont lié et dont la coche “exporter sur la 1ère frame” est activée, alors ces objets-la seront chargés avant même votre chargement. Pour éviter cela, désactivez la coche et placez ces objets sur la frame 2 en dehors de la scène.
  • La frame d'export des classes. Il se peut que vous ayez beaucoup de classes. Celles-ci sont exportées sur la frame 1 par défaut. Pour modifier ce paramètre, vous pouvez aller dans les options de publication et dans les paramètres Actionscript 2, mettre la frame 2. Attention, vous ne pourrez plus utiliser de classe sur la 1ère frame !
  • Le nombre d'objets sur votre 1ère frame. Faites en sorte qu'elle soit la plus légère possible afin que le chargement apparaisse quasi intantanément !

Exemple

Voici un exemple : ici