Loader对象不调度Event.COMPLETE

时间:2009-06-24 09:23:45

标签: flash actionscript-3

我正在使用此类同步加载多个图像。不知怎的,加载器不会触发任何事件(Event.COMPLETE,ProgressEvent.PROGRESS),奇怪的是我也没有得到任何错误(使用FlashDevelop和Flex3 SDK)。

package  
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.*;
    import flash.net.URLRequest;

    public class MultiImgLoader extends EventDispatcher
    {
        private var img_array:Array;
        public var images:Array;
        private var loader:Loader = new Loader();

        public function MultiImgLoader(img_array:Array) 
        {
            this.img_array = img_array;
            trace("[MultiImgLoader] about to load " + img_array.length);
            if (img_array.length > 0)
            {
                load(img_array[0]);
            }
        }

        private function load(img:String):void
        {
            trace("[MultiImgLoader] load " + img);
            loader.addEventListener(ProgressEvent.PROGRESS, progress);
            loader.addEventListener(Event.COMPLETE, this.ready);
            var req:URLRequest = new URLRequest(img);
            loader.load(req);
        }

        public function ready(ev:Event):void
        {
            var key:String = ev.target.contentLoaderInfo.url;
            trace("[MultiImgLoader] ready " + key);
            images.push( { key : ev.target } );
            if (img_array.length > images.length)
            {
                for (var i:int = 0; i < img_array.length; i++ )
                {
                    if (img_array[i] == key)
                    {
                        load(img_array[i+1]);
                    }
                }
            }
        }

        public function progress(ev:ProgressEvent):void
        {
            trace(ev.bytesLoaded);
        }

    }

}

3 个答案:

答案 0 :(得分:6)

好的,明白了。 这样:

loader.addEventListener(ProgressEvent.PROGRESS, progress);
loader.addEventListener(Event.COMPLETE, this.ready);

应该读到:

loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ready);

我甚至不知道为什么Loader-Class有addEvenListener方法 - 冗余任何人?

答案 1 :(得分:3)

我对弱听众有同样的问题,正常工作正常

//BUG event not fired
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler,false,0,true);  

//OK event fired
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);   

答案 2 :(得分:1)

我有类似的东西,但后来我将我的加载器从一个新的Loader()更改为一个URLLoader(),它与loader.addEventListener一起工作。

此页面帮助了我:http://livedocs.adobe.com/flex/3/html/help.html?content=17_Networking_and_communications_3.html