2009-11-01 2 views
1

Dans AS3, j'ai un ImageLoader de classe externe qui charge une image sur demande. Dans cette classe, j'ai un gestionnaire d'événements:ActionScript 3: Propriété bytesLoaded de ProgressEvent dans la classe Document

ImageLoader Classe

public function loadImg(path:String):void 
{ 
ldr = new Loader(); 
ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, getProgress); 
var req:URLRequest = new URLRequest(path); 
ldr.load(req); 
} 

private function getProgress(e:Event):void 
{ 
dispatchEvent(new Event("PROGRESS_INFO")); 
} 

Je suis en train d'envoyer la progression du téléchargement des mises à jour de retour à la classe principale du document et l'afficher à l'écran, donc je suis en train à envoyer l'événement « PROGRESS_INFO », puis obtenir les informations de l'objet de l'événement passé, comme ceci:

classe document

private function getProgressInfo(e:Event):void 
{ 
trace(e.target.bytesTotal); 
} 

Ceci cependant, s'avère futile ... des idées sur la façon dont je peux obtenir l'information de progrès sur la classe IMageLoader?

note: Je sais que je peux ajouter bytesLoaded & bytesTotal à une variable publique, mais je n'aurai alors pas l'avantage de voir la mise à jour de la propriété bytesLoaded dans la classe ProgressEvent. Des idées?

Répondre

2

Assurez-vous que votre classe ImageLoader étend la classe EventDispatcher. En outre, au lieu de créer un nouvel événement, vous devez réexpédier ProgressEvent.

private function getProgress(e:ProgressEvent):void 
{ 
dispatchEvent(e); 
} 

Cela devrait fonctionner dans la classe de document:

myImageLoader = new ImageLoader(); 
myImageLoader.addEventListener(ProgressEvent.PROGRESS, getProgressInfo); 

private function getProgressInfo(e:ProgressEvent):void 
{ 
trace(e); 
} 
+0

Bien sûr! Vous avez essentiellement envoyé l'événement AS ou IN dans l'événement. J'aime ça! Génie sanglant! À votre santé! –