AS3:从多个源加载字节

时间:2010-01-02 03:14:26

标签: flex actionscript-3

我正在将多个图像加载到一个类实例中,我想跟踪任何给定点的完整加载数据量有多大。 我已经通过PHP脚本从我的图像目录中获取了总字节数...但是由于某些原因,从每个图像上的ProgressEvent收集新字节似乎很棘手。 让我们假设totalBytes变量是正确的,我完全不熟悉ProgressEvent的工作方式......

每次ProgressEvent获取新字节时都会触发事件吗? 如果没有,我如何跟踪当前的总字节数?

我确定我错了,但这就是我正在尝试的事情:

public function thumbProgress(e:ProgressEvent):void
{
    //trying to check for a new data amount, in case the progress event updates
    //insignificantly
    if(e.bytesLoaded != this.newByte)
    {
        this.newByte = this.currentLoadedBytes - e.bytesLoaded;
        this.currentLoadedBytes += this.newByte;
        this.textprog.text = this.currentLoadedBytes.toString() + "  / " + this.totalBytes.toString();
        this.newByte = e.bytesLoaded;   
    }

    if(this.currentLoadedBytes >= this.totalBytes)
    {
        this.textprog.text = "done loading.";
    }
}

2 个答案:

答案 0 :(得分:1)

您是否使用 flash.display.Loader 加载图片?然后,您可以使用 Loader.contentLoaderInfo.bytesTotal 属性,该属性应在图像加载完成后包含正确的字节数。 Loader.contentLoaderInfo属性引用已加载内容的LoaderInfo实例,该实例包含有关该文件的大量数据,例如总大小,已完成加载的数量以及加载它的URL。查看the LoaderInfo reference

为所有加载器求和此属性的值,以获取已加载数据的总量,例如:在每个加载器的COMPLETE处理程序中。

干杯

答案 1 :(得分:0)

也许这不是您问题的答案,但我建议您查看bulk-loader库。它将极大地简化加载多个资产。这是一个快速而肮脏的使用示例。我们使用进度条获得了简单的应用程序,我们希望在下载图像时更新进度条。

<mx:Script>
    <![CDATA[
        import br.com.stimuli.loading.BulkProgressEvent;
        import br.com.stimuli.loading.BulkLoader;


        private function init():void {
            loadImages();
        }
        private function loadImages():void {

            var loader : BulkLoader = new BulkLoader("main-site");
            loader.add("http://www.travelblog.org/Wallpaper/pix/tb_turtle_diving_sipadan_malaysia.jpg", {id:"a"});
            loader.add("http://www.travelblog.org/Wallpaper/pix/tb_fiji_sunset_wallpaper.jpg", {id:"b"});   
            loader.addEventListener(BulkLoader.COMPLETE, onAllLoaded);
            loader.addEventListener(BulkLoader.PROGRESS, onAllProgress);
            loader.addEventListener(BulkLoader.ERROR, onAllError);    
            loader.start();                 

        }

        private function onAllLoaded(evt : BulkProgressEvent):void {

        } 

        private function onAllProgress(evt : BulkProgressEvent):void {

            progressBar.setProgress(evt.ratioLoaded * 100, progressBar.maximum);

        }

        private function onAllError():void {

        }

    ]]>
</mx:Script>


<mx:ProgressBar x="304" y="360" width="582" id="progressBar" mode="manual" minimum="0" maximum="100"/>