Итак, я пытаюсь загрузить ресурсы, добавить их в словарь и заставить метод рисования искать в этом словаре и рисовать на основе определенных предикатов. У меня есть функция, которая перебирает Vector
из String
с, вызывая экземпляр 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
.
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
публичная функция drawSprite (resourceUrl: String): void
{
var drawFunct: Function = function (spr: Словарь, индекс: 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 вызывался только один раз (я проверял трассировку в обработчике complete). Однако Loader
вызывает загрузку каждый раз, когда цикл повторяется. Я попытался создать отдельные загрузчики для каждого ресурса, просто чтобы посмотреть, будет ли он работать, но мне не повезло с этим. Нужно ли делать отдельные загрузчики и обработчики событий? Или я просто не правильно использую Loader?