Loader Event Complete函数只被调用一次

时间:2011-02-21 20:00:44

标签: flex actionscript-3 actionscript loader

所以,我正在尝试加载资源,将它们添加到字典中,并使用绘图方法搜索该字典并根据某些谓词进行绘制。我有一个迭代VectorString的函数,调用Loader的实例来加载实例化为URLRequest

    private function loadImages(urls:Vector.<String>):void
    {
        var loader:Loader = new Loader();

        loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
        loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);

        var loadResource:Function = function(item:String,index:int,vector:Vector.<String>):void
        {
                loader.load(new URLRequest(item));
        }

        urls.forEach(loadResource);
    }

然后我有一个处理加载完成的事件处理程序,调用一个在Dictionary中找到Loaded位图的绘图方法。

    public function completeHandler(event:Event):void
    {
        var loader:Loader = Loader(event.target.loader);
        var bm:BitmapData = new BitmapData(loader.width,loader.height,false);
        bm.draw(loader,new Matrix());
        this.bmDict[loader.contentLoaderInfo.url] = bm;
        trace("complete handler" + loader.contentLoaderInfo.url);
        trace(this.bmDict[loader.contentLoaderInfo.url]);
        this.drawSprite(loader.contentLoaderInfo.url);
    }

我的drawsprite功能 public function drawSprite(resourceUrl:String):void             {             var drawFunct:Function = function(spr:Dictionary,index:int,vector:Vector。):void             {

            var sprRen:SpriteRenderer = new SpriteRenderer();

            trace(resourceUrl.search("blue"));
            trace(resourceUrl.search("drkOrange"));
            trace(resourceUrl.search("green"));
            trace(resourceUrl.search("ltblue"));
            trace(resourceUrl.search("orange"));
            trace(resourceUrl.search("pink"));
            trace(resourceUrl.search("purple"));
            trace(resourceUrl.search("red"));
            trace(resourceUrl.search("yellow"));
            trace(spr.color);

        if((resourceUrl.search("blue") != -1) && (spr["color"] == 1)) {
            var bigBm:BitmapData = sprRen.renderType(spr["type"],bmDict[resourceUrl]);
            spr["sprite"].graphics.beginBitmapFill(bigBm,null,true,false);
            spr["sprite"].graphics.drawRect(0,0,BIG_SPRITE_SCALE,BIG_SPRITE_SCALE);
            spr["sprite"].graphics.endFill();
        } else if ((resourceUrl.search("drkOrange") != -1) && (spr["color"] == 2)){
            var bigBm:BitmapData = sprRen.renderType(spr["type"],bmDict[resourceUrl]);
            spr["sprite"].graphics.beginBitmapFill(bigBm,null,true,false);
            spr["sprite"].graphics.drawRect(0,0,BIG_SPRITE_SCALE,BIG_SPRITE_SCALE);
            spr["sprite"].graphics.endFill();

        } else if ((resourceUrl.search("green") != -1) && (spr["color"] == 3)){
            var bigBm:BitmapData = sprRen.renderType(spr["type"],bmDict[resourceUrl]);
            spr["sprite"].graphics.beginBitmapFill(bigBm,null,true,false);
            spr["sprite"].graphics.drawRect(0,0,BIG_SPRITE_SCALE,BIG_SPRITE_SCALE);
            spr["sprite"].graphics.endFill();

        } else if ((resourceUrl.search("ltblue") != -1) && (spr["color"] == 4)){
            var bigBm:BitmapData = sprRen.renderType(spr["type"],bmDict[resourceUrl]);
            spr["sprite"].graphics.beginBitmapFill(bigBm,null,true,false);
            spr["sprite"].graphics.drawRect(0,0,BIG_SPRITE_SCALE,BIG_SPRITE_SCALE);
            spr["sprite"].graphics.endFill();

        } else if ((resourceUrl.search("orange") != -1) && (spr["color"] == 5)){
            var bigBm:BitmapData = sprRen.renderType(spr["type"],bmDict[resourceUrl]);
            spr["sprite"].graphics.beginBitmapFill(bigBm,null,true,false);
            spr["sprite"].graphics.drawRect(0,0,BIG_SPRITE_SCALE,BIG_SPRITE_SCALE);
            spr["sprite"].graphics.endFill();

        } else if ((resourceUrl.search("pink") != -1) && (spr["color"] == 6)){
            var bigBm:BitmapData = sprRen.renderType(spr["type"],bmDict[resourceUrl]);
            spr["sprite"].graphics.beginBitmapFill(bigBm,null,true,false);
            spr["sprite"].graphics.drawRect(0,0,BIG_SPRITE_SCALE,BIG_SPRITE_SCALE);
            spr["sprite"].graphics.endFill();

        } else if ((resourceUrl.search("purple") != -1) && (spr["color"] == 7)){
            var bigBm:BitmapData = sprRen.renderType(spr["type"],bmDict[resourceUrl]);
            spr["sprite"].graphics.beginBitmapFill(bigBm,null,true,false);
            spr["sprite"].graphics.drawRect(0,0,BIG_SPRITE_SCALE,BIG_SPRITE_SCALE);
            spr["sprite"].graphics.endFill();

        } else if ((resourceUrl.search("red") != -1) && (spr["color"] == 8)){
            var bigBm:BitmapData = sprRen.renderType(spr["type"],bmDict[resourceUrl]);
            spr["sprite"].graphics.beginBitmapFill(bigBm,null,true,false);
            spr["sprite"].graphics.drawRect(0,0,BIG_SPRITE_SCALE,BIG_SPRITE_SCALE);
            spr["sprite"].graphics.endFill();

        } else if ((resourceUrl.search("yellow") != -1) && (spr["color"] == 9)){
            var bigBm:BitmapData = sprRen.renderType(spr["type"],bmDict[resourceUrl]);
            spr["sprite"].graphics.beginBitmapFill(bigBm,null,true,false);
            spr["sprite"].graphics.drawRect(0,0,BIG_SPRITE_SCALE,BIG_SPRITE_SCALE);
            spr["sprite"].graphics.endFill();

        }

        }

        sprites.forEach(drawFunct);
        }

所以问题是:只有Vector中的第一张图片正在绘制。经过进一步检查,我发现completeHandler只被调用一次(我在完整的处理程序中放置了一个跟踪来检查)。但是,Loader每次循环迭代时都会调用load。我尝试为每个资源实例化单独的加载器,只是为了看它是否可行,但我没有运气。我是否需要制作单独的加载器事件处理程序?或者我只是没有正确使用Loader?

1 个答案:

答案 0 :(得分:1)

您只使用一个加载程序同时加载多个文件,它无法工作,Loader只能同时处理一个文件。 因此,如果您只想使用一个加载器,则需要按资源加载一个加载器或逐个加载资源。