使用flash.display.Loader的进度指示器

时间:2009-06-13 12:44:14

标签: flash actionscript

我需要在背景上加载图像时执行简单的进度指示器。我正在使用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闪存陷阱。

2 个答案:

答案 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个左右),我认为这只是一个非常粗糙的问题。如果我测量了事件之间的时间,我可能会更早发现正在发生的事情。