2009-06-13 7 views
1

Je dois faire un simple indicateur de progression lorsque je charge une image en arrière-plan. J'utilise la classe flash.display.Loader dans ce qui semble être la méthode standard. Le problème est que même si je peux voir que flash.display.LoaderInfo déclenche le ProgressEvent.PROGRESS à intervalles réguliers en utilisant le suivi, un texte mis à jour dynamiquement (ou tout autre objet graphique) est mis à jour une seule fois lorsque le chargement se termine. Il semble que la mise à jour de l'affichage a été mise en file d'attente et n'a provoqué qu'une seule mise à jour à la fin. Ceci est une version simplifiée de la fonction qui initie le chargement:Indicateur de progression utilisant flash.display.Loader

public function init() 
{ 
    var loader : Loader = new Loader(); 
    var request : URLRequest = new URLRequest(this.imageSrc); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded); 
    loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, updateProgress); 
    loader.load(request); 
} 

et c'est le gestionnaire d'événements:

private function updateProgress(event : ProgressEvent) : void 
{ 
    progressIndicator.text = event.bytesLoaded + "/" + event.bytesTotal; 
    trace(event.bytesLoaded + "/" + event.bytesTotal); 
} 

Je me excuse sans doute une question élémentaire. Je n'utilise pas Flash très souvent. Mais il me semble que je fais une chose sensible et intuitive. Ça doit être un piège 101 Flash.

Répondre

0

Il semble que la réponse soit plutôt ennuyeuse. Mon problème était que pendant le travail de développement, j'utilisais le lecteur Flash autonome (j'ai double-cliqué sur le fichier SWF ou l'ai lancé dans Adove Flash CS3). Le problème était apparemment que les images étaient déjà mises en cache, ce qui a entraîné plusieurs invocations successives rapides de Event.PROGRESS. Lorsque j'ai essayé plus tard le fichier SWF dans un navigateur et nettoyé régulièrement le cache du navigateur, les images ont été chargées comme prévu à chaque fois. Je suppose que le plus curieux était que même si les images étaient mises en cache, j'ai eu plusieurs événements Event.PROGRESS (environ 3) et j'ai supposé que c'était juste une question de granularité très grossière. Si je mesurais le temps entre les événements, j'aurais probablement découvert plus tôt ce qui se passait.

3

Je viens de coller votre code dans une nouvelle fla et l'ai essayé, avec des réglages mineurs (de la classe au code de la timeline, rien de majeur).

import flash.events.ProgressEvent; 

var progressIndicator:TextField = new TextField(); 
addChild(progressIndicator); 
progressIndicator.autoSize = "left"; 
progressIndicator.border = true; 

var loader : Loader = new Loader(); 
    var request : URLRequest = new URLRequest("kernel_params.swf"); 
    loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, updateProgress); 
    loader.load(request); 

function updateProgress(event : ProgressEvent) : void 
{ 
    progressIndicator.text = event.bytesLoaded + "/" + event.bytesTotal; 
    trace(event.bytesLoaded + "/" + event.bytesTotal); 
} 

tout semble bien. Avez-vous des erreurs, des messages dans le panneau de sortie? Peut-être qu'il y a quelque chose d'autre dans le code, parce que la partie que vous avez envoyée semble bien.

+0

Merci beaucoup pour vos efforts et votre temps. Je pense avoir compris quel était le problème. Je vais poster une réponse. –

+0

Pas de problème. Je ne suis jamais tombé sur celui-ci, alors merci de nous avoir fait gagner du temps en le partageant. –

Questions connexes