我需要在背景上加载图像时执行简单的进度指示器。我正在使用flash.display.Loader类,这似乎是标准方式。问题是即使我可以看到flash.display.LoaderInfo使用跟踪定期触发ProgressEvent.PROGRESS,动态更新的文本(或任何其他图形对象)仅在加载完成时更新一次。看起来如果显示更新排队并且最后只导致一次更新。这是启动加载的函数的简化版本:
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 :(得分:3)
我只是将你的代码粘贴到一个尝试过的新版本中,并进行了一些小调整(从类到时间轴代码,没什么大不了的。)
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);
}
看起来很好。您是否收到任何错误,输出面板中的任何消息?
也许在代码中的其他地方有类型的东西,因为你发送的部分看起来很好。
答案 1 :(得分:0)
似乎答案相当沉闷。我的问题是在开发工作期间,我使用的是独立的Flash播放器(我双击SWF文件或在Adove Flash CS3中运行它)。问题显然是图像已经被缓存,导致几次快速连续调用Event.PROGRESS。当我稍后在浏览器中尝试SWF文件并定期清理浏览器缓存时,每次都按预期加载图像。
我想令人费解的是,即使图像被缓存,我也收到了几个Event.PROGRESS事件(大约3个左右),我认为这只是一个非常粗糙的问题。如果我测量了事件之间的时间,我可能会更早发现正在发生的事情。