Forum de discussion
Forum « Flash et Shockwave » (archives)
Re: loading - Préchargement
Envoyé: 27 septembre 2002, 8h47 par Oznog
Flash c'est du streaming, les objets entre les uns après les autres en flux continu. Tu ne peux pas empêcher ça.
Flash va chercher les objets selon un ordre qui n'a rien à voir avec la ligne de temps (timeline). Mais plutôt selon l'ordre des calques (layer). De plus, dans l'onglet FLASH lors de la publicaton, tu peux spécifier "Buttom Up" ou "Top down". Ça indique à Flash de commencer à charger les éléments à partir du dernier layer vers le premier ou l'inverse.
Bon ça n'arrange pas ton problème ;-) On y arrive.
Alors la seule chose de possible avec Flash c'est d'attendre que les éléments soit chargés et en place avant d'entrer dans la zone (scène, frame) qui les concerne.
Pour ce faire, il n'y a pas 36 solution.
1. Tu dois mettre un stop(); avant le début de l'animation.
2a. Tu test si le nombre de "bytes" chargés du movieClip ( movieClip.getBytesLoaded() ) est le même que le nombre total de "bytes" ( movieClip.getBytesTotal() ). Si le nombre de "bytes" chargés est égal ou plus grand tu fait ton gotoAndPlay pour partir l'animation.
2b. Tu peux aussi tester si un nombre x de "Frame" est chargé avec "_framesloaded" et
"_totalframes".
3. Le test peut être sur un "onClipEvent" en "enterFrame" ou encore sur un "ActionFrame" avec un gotoAndPlay pour bouclé tant que le test n'est pas positif.
4. ATTENTION, Flash boggue au début de l'animation. Il a trop de chose à faire lors des premier "frame" du "timeline". Je te conseil de mettre ton STOP(); et le TEST pas avant le "frame" 15 du "timeline".
Ex : (frame 15 Le test et le stop, frame 16, ton animation.)
Timeline
1|2|3|4|5|6|...15|16
Exemple de code avec un "FrameAction" sur le "frame" 15 : (Ce code test l'ensemble des "bytes" du Flash et non pas seulement ceux d'un movieClip.) J'ai ajouté sur le "frame" 2 un "label" Chargement et sur le "frame" 16 un "label" Animation.
nCharge=Math.floor(this.getBytesLoaded()/this.getBytesTotal()*100)
if (number(nCharge)>=100) {
this.gotoAndStop ("Animation");
} else {
this.gotoAndPlay ("Chargement");
}
stop();
Comme tu voie, je fait un pourcentage. Tu peux alors afficher en même temps ce pourcentage pour indiquer au visiteur le déroulement du chargment. En ajoutant par exemple sur la scène un champ texte dynamique avec le nom de variable "Pourcentage" et ce code juste avant le IF.
_root.Pourcentage = nCharge + "%";
Ciao
Oznog
Réponses
|