PDA

Просмотр полной версии : Использование метода Loader.load() в цикле


Arsenium
25.05.2007, 16:55
Есть программа:
var stageWidth:int=550; var stageHeight:int = 400;
var mapXML:XML = new XML();
var mapLoader:URLLoader = new URLLoader(new URLRequest("map.xml"));
mapLoader.addEventListener(Event.COMPLETE, redrawMap);

function redrawMap(event:Event):void
{
mapXML = XML(mapLoader.data);
trace("Data loaded.");


var pic:Array = new Array();
var picLoader:Loader = new Loader();
picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,picLoadComplete);

for each (var cell:XML in mapXML.cell)
{
var filename:String = String(cell.filename);
var xc:Number = Number(cell.xc);
var yc:Number = Number(cell.yc);
picLoader.load(new URLRequest(filename));
}

function picLoadComplete(event:Event):void
{
trace(xc);

pic.push(new Bitmap());
pic[0].bitmapData = event.target.content.bitmapData;
pic[0].x = xc*pic[0].width;
pic[0].y = stageHeight - (yc+1)*pic[0].height;
addChild(pic[0]);
}
}
Проблема в том, что, как мне кажется, новый picLoader.load(new URLRequest(filename)); можно вызывать лишь из обработчика предыдущего вызова - из function picLoadComplete(event:Event):voidт.е получается,нужна рекурсия.
Можно ли ее избежать?
Если нет, то какое условие надо ставить для выхода из рекурсии?

etc
25.05.2007, 17:07
Так надо не в цикле вызывать загрузку, а после Event.COMPLETE вызывать загрузку следующего рисунка.

Arsenium
25.05.2007, 18:27
Тогда как сделать парсинг XML без использования for each..in?