Préchargement avec barre de progression en actionscript2 – basique

2 janvier 2008 par dans Action script

But : comprendre comment fonctionne le préchargement ou preload :
Ce que nous voulons : un champ texte contenant le pourcentage loadé et une barre de progression qui va agrandrir sa taille initiale de 0 à 100%.

Préparation :

Créer sur la scène 3 éléments :

Pour l’affichage du pourcentage en nombre, créez un champ texte dont le type est texte dynamique avec comme nom d’occurence pourcentageCharger_txt

Pour l’affichage des octets chargés, créez un champ texte dont le type est texte dynamique avec comme nom d’occurence octetCharger_txt

Pour la barre de progression : dessinez un rectangle de 200 pixels de large sur 10 de haut par exemple, transformez le en movie clip (F8 en faisant attention à ce que le point d’alignement se situe en haut à gauche) et donnez lui comme nom d’occurence barreProgression_mc

Créez un nouveau calque sur lequel vous insérez le code ci-dessus.

stop(); //

var poidsTotal:Number; //stockons le poids total de l’animation dans une variable dont le type est Number
var partCharger:Number; //stockons le poids effectivement chargé de l’animation dans une variable dont le type est Number
var pourcentageCharger:Number; //stockons le pourcentage de chargement dans une variable dont le type est Number
var barre:Number = <em>barreProgression_mc</em>._width; //stockons la taille réelle de la barre dans une variable dont le type est Number

this.onEnterFrame = function () { //
        poidsTotal = Math.round(this.getBytesTotal()/100);      // Poids total de l’anim.
        partCharger = Math.round(this.getBytesLoaded()/100);    //  stokons le poids réellement chargé.
        pourcentageCharger = Math.round((partCharger/poidsTotal)*100);   // Calcule du pourcentage arrondi

        if(isNaN(pourcentageCharger)) { // si la variable pourcentageCharger est bien un nombre
                pourcentageCharger_txt.text = poid_txt.text = ""; // si isNaN renvoie true on vide les champs textes
        } else { // sinon on effectue le préchargement
                pourcentage_txt.text = pourcentageCharger +" %"; //Affichage du pourcentage
                <em>barreProgression_mc</em>._width = pourcentageCharger*(barre/100);   //Changement de la taille de la barre
                octetCharger_txt.text = partCharger+"Ko / "+poidsTotal+"Ko";    //Affichage du poids chargé et du poids total

                if (pourcentageCharger >= 100) { // si le chargement est fini
                        delete this.onEnterFrame; // on supprime le gestionnaire onEnterFramme
                        this.gotoAndPlay (2); //On joue l’animation à partir de la frame 2
                }
         }
};

 

Quelques remarques:

Le gestionnaire onEnterFrame s’applique à toutes les images de l’animation dès sa première exécution. Il faut donc penser à le supprimer avec la commande delete dès que le préchargement est fini.

Math.round() permet d’arrondir un nombre à l’entier le plus proche.
ex : Math.round(5,49) nous donnera 5
ex : Math.round(5,51) nous donnera 6
Math.floor() permet d’arrondir un nombre à l’entier inférieur.
ex : Math.floor(5,2) nous donnera 5
Math.ceil() permet d’arrondir un nombre à l’entier supérieur.
ex : Math.ceil(5,2) nous donnera 6

On utilise isNaN pour savoir s’il s’agit bien d’un nombre. isNaN signifie is Not a Number. isNaN renvoie la valeur true lorsque l’expression testée n’est pas un nombre et false lorsqu’il s’agit d’un nombre. Ici, si true est renvoyé on vide les 2 champs texte dynamique.

Commentaires (5)

 

  1. Renaud dit :

    Salut, peut-être que tu as écris cet article il y a longtemps. Mais si cela peut-être utile à d’autres personnes, je tiens à signaler que IsNaN ne fonctionne pas… Il faut donc écrire « isNaN » sans la majuscule au début ! Cela pourra peut-être aider quelques uns.

    Sinon, merci beaucoup pour ton code

  2. Niums dit :

    aie aie aie, merci Renaud. Je corrige ca.

  3. Antoine dit :

    Salut,
    Tout d’abord merci pour ton blog il me rend bien service.
    Ensuite j’aimerai te signaler une erreur « var barre:Number = barre_mc._width; » alors que le movieclip que tu nous demande de faire est d’occurrence « barreProgression_mc ».
    Voilà et encore merci pour ton blog.

  4. Niums dit :

    2 erreurs sur si peu de code ca le fait pas la, lol.

    Merci Antoine

Laisser un commentaire