Vous êtes ici : Accueil - Ressources Flash - Largeur, hauteur et taille de fichiers externes.

Largeur, hauteur et taille de fichiers externes

L'utilisation de fichiers multimédia externes à Flash nécessite souvent des préchargements visuels pour faire patienter les visiteurs. A ce moment là, qui n'a jamais eu de résultats farfelus de la part de Flash? Taille de fichier égale à NaN ou encore largeur et longueur null (égal à zéro) pendant un temps plus ou moins court au tout début?

"Est-ce un bug et comment puis-je résoudre ce problème" est une question qui revient souvent sur les forums en ligne. Ce n'est ni un bug et il est possible de le résoudre, faut-il comprendre pourquoi Flash affiche ces valeurs bizarres.

isNaN();

La définition de NaN indique que Flash attend un nombre pour valeur à une variable mais que la valeur reçue n'en est pas un. Une valeur inconnue comme undefined retourne nécessairement NaN. (NDR : à noter que NaN, ce sont les initiales de "Not a Number" - pas un nombre)

Dans Flash, pour télécharger un fichier média visuel, le processus demande de créer une occurence de MovieClip qui contiendra ce média. A ce moment, l'occurence est "vide"; ses propriétés MovieClip.getBytesLoaded et MovieClip.getBytesTotal sont égales à zéro.

Lorsqu'un chargement de fichier externe démarre, Flash va recevoir une entête du fichier - ou header. Dans cette entête, plusieurs informations sont contenues, entre autre la taille totale du fichier. Mais si cette entête n'est pas entièrement chargée, Flash n'a aucun moyen de connaître cette information. Aussi retourne-t-il undefined qui n'est pas accepté par la propriété MovieClip.getBytesTotal. Flash va donc retourner la valeur qui lui est permis de renvoyer, c'est à dire NaN.

Ainsi, la fonction isNaN de Flash permet de gérer l'affichage du pourcentage. Si la propriété MovieClip.getBytesTotal retourne NaN, le test effectué avec la fonction isNaN retourne true. On peut alors forcer Flash à afficher un string à la place : "0%". Si le test isNaN retourne false, cela veut tout simplement dire que la valeur attendue est bien un nombre et les valeurs de MovieClip.getBytesLoaded et MovieClip.getBytesTotal peuvent être utilisées normalement.

Note : si le chargement d'un fichier échoue, MovieClip.getBytesLoaded reste égale à zéro et MovieClip.getBytesTotal retourne -1.

MovieClip._width = 0, MovieClip._height = 0;

Contrairement à la taille d'un fichier, Flash ne semble pas chercher la largeur et la hauteur dans l'entête, mais dans les propriétés de l'occurence elle-même lorsque celle-ci est instanciée sur la scène. C'est d'ailleur un problème très connu concernant la méthode MovieClip.attachMovie : tant que l'occurence n'est pas instanciée sur la scène, Flash retourne zéro pour ses propriétés _width et _height.

Il faut donc tout simplement attendre que le fichier soit totalement charger pour que Flash en connaisse sa largeur et sa hauteur.

Interprétation de l'implémentation

En pseudo code, la fonction de préchargement donnerait ceci :

this.onEnterFrame = function () {
  // calcul du pourcentage
  /*
  Si getBytesTotal n'est pas un nombre (isNaN) {
      on retourne la valeur 0 comme pourcentage;
  } sinon {
      on effectue le calcul de proportionnalité;
  }
  */

  // Fin de chargement
  /*
  Si le calcul de pourcentage retourne 100 ou plus {
      on appelle une fonction qui fera apparaître progressivement et
      joliment le média visuel;
  }
  */

}

Copyright © . Roikku.com. Tous droits de reproduction réservés.

Google