Loader对象不调度Event.COMPLETE

sai*_*otd 3 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);
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

sai*_*otd 6

好的,我知道了.这个:

loader.addEventListener(ProgressEvent.PROGRESS, progress);
loader.addEventListener(Event.COMPLETE, this.ready);
Run Code Online (Sandbox Code Playgroud)

应该读这个:

loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ready);
Run Code Online (Sandbox Code Playgroud)

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

  • Loader具有addEventListener,因为它继承自EventDispatcher.虽然Loader类不直接发出有关加载状态的事件,但它确实处理了自身的所有常见UI事件,包括鼠标事件,显示事件(ADDED_TO_STAGE,ENTER_FRAME等)和键盘事件.只是与内容加载有关的事件由它的内置LoaderInfo实例处理,名为contentLoaderInfo. (2认同)