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 に答える