2

我有一个典型的情况,大循环正在加载大量图像并且它是异步完成的,这使得浏览器在加载过程中释放,我想让它同步但很难做到这一点。我发现这个类同步加载器,它工作得很好,但是你不能将鼠标事件监听器添加到加载器。这是示例代码:

for (var i = 0; i < items.length; i++) {
        
            item = items[i];
            
            if(item.layer>1){
                ld:Loader = new Loader();
                ld.load(new URLRequest(item.url));
                ld.rotation = item.rotation;
                ld.x = item.x ;
                ld.y = item.y;
                ld.addEventListener(Event.COMPLETE, loadComplete);
                ld.scaleX = item.scaleX;
                ld.scaleY = item.scaleY;
                ld.addEventListener(MouseEvent.MOUSE_DOWN, select);
                layers_arr[item.layer].addChild(ld);
            }

}

知道如何做到这一点吗?

4

2 回答 2

1

就像 arieljake 说的,这里有一个关于如何使用它的小例子:

package
{
    import com.greensock.TweenLite;
    import com.greensock.events.LoaderEvent;
    import com.greensock.loading.ImageLoader;
    import com.greensock.loading.LoaderMax;
    import com.greensock.loading.MP3Loader;
    import com.greensock.loading.SWFLoader;
    import com.greensock.loading.XMLLoader;
    import com.greensock.loading.display.ContentDisplay;

    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;

    public class Main extends Sprite
    {
        public var itemUrl:String;
        public var queue:LoaderMax = new LoaderMax({name:"mainQueue", onProgress:progressHandler, onComplete:completeHandler, onError:errorHandler});

        public function Main()
        {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;

            queue.maxConnections = 1; //Checks how much items that can be loaded at the same time
            queue.append( new ImageLoader("http://www.myurl.com/myimage.jpg", {name:"photo1", estimatedBytes:2400, container:this, alpha:0,scaleMode:"proportionalInside"}) );
            queue.append( new ImageLoader("http://www.myotherurl.com/awesomeimage.jpg", {name:"photo2", estimatedBytes:2400, container:this, alpha:0, scaleMode:"proportionalInside"}) );

            queue.addEventListener(LoaderEvent.CHILD_COMPLETE, childCompleteHandler); //checks when a child has completed to load
            queue.addEventListener(LoaderEvent.CHILD_PROGRESS, childProgressHandler); //checks the child progress

            //prioritize the loader named "photo1"
            LoaderMax.prioritize("photo1");  //same as LoaderMax.getLoader("photo1").prioritize();


            //start loading
            queue.load();



        }

        protected function childProgressHandler(event:LoaderEvent):void
        {
            var procent:Number = Math.floor(event.target.progress*100);
            var targetName:String = event.target.name;
            trace(procent+'% loaded of item: '+targetName);
        }

        protected function childCompleteHandler(event:LoaderEvent):void
        {
            var targetName:String = event.target.name;
            trace(targetName+' is loaded!');
        }


        private function completeHandler(event:LoaderEvent):void {

            var objects:Array = event.currentTarget.content;

            for(var i:uint=0; i < objects.length; i++)
            {

                var image:ContentDisplay = LoaderMax.getContent(objects[i].name);
                TweenLite.to(image, 1, {alpha:1, y:100});

            }
            trace(event.target + " is complete!");
        }

        private function errorHandler(event:LoaderEvent):void {
            trace("error occured with " + event.target + ": " + event.text);
        }
    }
}
于 2012-02-20T16:09:05.747 回答
0

看看这个: http: //www.greensock.com/loadermax/

让我们指定同时加载程序的最大数量

于 2012-02-20T04:09:08.697 回答