2009-06-13 62 views
1

我需要在后台加载图像时做一个简单的进度指示器。我使用的flash.display.Loader类似乎是标准的方式。问题是,即使我可以看到flash.display.LoaderInfo使用跟踪以固定的时间间隔触发ProgressEvent.PROGRESS,但动态更新的文本(或任何其他图形对象)只会在加载完成时更新一次。它看起来像是显示更新排队并在最后只引发一次更新。这是启动加载功能的简化版本:使用flash的进度指示器display.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); 
} 

,这是事件处理程序:

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

我的可能是一个基本的问题道歉。我不经常使用Flash。但在我看来,我正在做一个明智而直观的事情。它必须是101闪存陷阱。

回答

0

看来答案是相当无聊。我的问题是,在开发工作中,我使用了独立的Flash播放器(我双击SWF文件或在Adove Flash CS3中运行它)。显然问题在于图像已经被缓存,导致Event.PROGRESS几次快速连续调用。当我稍后在浏览器中尝试SWF文件并定期清理浏览器缓存时,图像每次都按预期加载。

我想,令人费解的是,即使图像被缓存了,我得到了几个Event.PROGRESS事件(大约3个左右),我认为这只是一个非常粗糙的问题。如果我测量了两次事件之间的时间,我可能会更早地发现发生了什么事情。

3

我只是在一个新的fla中粘贴了你的代码,并尝试了一些小的调整(从类到时间轴代码,没有什么大不了)。

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); 
} 

everthing似乎很好。您是否收到任何错误,输出面板中的任何消息? 也许在代码的其他地方有类型的东西,因为你发送的部分看起来很好。

+0

非常感谢您的努力和时间。我想我已经想出了问题所在。我要发布一个答案。 – 2009-06-13 14:05:55