Flash AS 3 Loader OnComplete внутри цикла - PullRequest
1 голос
/ 06 мая 2010

Я разместил свой вопрос в качестве ответа на этот вопрос: Как получить связанный URLRequest от Event.COMPLETE, запущенного URLLoader

Извините.И снова мой вопрос:


Привет, Как я могу заставить вашу функцию работать для объекта загрузчика в цикле?Спасибо!Meengla Вот мой существующий (грубый) код;Я всегда получаю mylabel из последнего элемента массива.

var _loader = new Loader(); 
for (j = 0; j < 5; j++) {
    //mylabel variable is correct setup in the loop
    _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void {
        doneLoad(e, mylabel);
    });

    _loader.load(new URLRequest(encodeURI(recAC[j].url)));

}//for loop

Ответы [ 2 ]

1 голос
/ 06 мая 2010

Согласно комментариям выше, это не будет работать, потому что:

1) Вы просто добавляете один и тот же прослушиватель 5 раз в загрузчик. 2) Вы просто перезагружаете один и тот же объект загрузчика 5 раз.

Окончательный результат будет таким, как если бы вы называли его только в последний раз.

Существует множество способов решения этой проблемы - асинхронная загрузка файлов - это один из лучших способов научиться кодировать, но, возможно, самый простой способ - это просто создать пять отдельных загрузчиков.

Я бы сделал что-то вроде этого:

var loaders:Array = [];
var labels:Array = ["label1", "label2", "label3", "label4", "label5"];
for (var j:int = 0; j < 5; j++) {
loaders[j] = new Loader();
loaders[j].contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loaders[j].load(new URLRequest(encodeURI(recAC[j].url)));
}

function completeHandler(e:Event):void {
doneLoad(e.currentTarget, labels[loaders.indexOf(e.currentTarget)]);
}

Запутанная часть заключается в том, чтобы найти хороший способ отслеживать, какая нагрузка связана с какой этикеткой и т. Д., Поскольку теоретически ваши нагрузки могут заканчиваться в любом порядке. Вот почему у меня есть отдельный массив меток, и вы просто сопоставляете нужную метку с загрузчиком, который только что завершил загрузку.

Надеюсь, это поможет!

0 голосов
/ 26 января 2011

линия любимая должна работать, но всегда возвращает -1, всегда. loaders.indexOf (e.currentTarget); * * тысяча один

Вот мой код

для (i; i <всего; i ++) { imgLoaderArray [i] = new Loader (); imgLoaderArray [i] .contentLoaderInfo.addEventListener (IOErrorEvent.IO_ERROR, urlError); <br> imgLoaderArray [i] .contentLoaderInfo.addEventListener (Event.COMPLETE, загружено); imgLoaderArray [i] .load (новый URLRequest (xmlList [i] .image)); }

функция загружена (e: Event): void { trace ("index:" + imgLoaderArray.indexOf (e.currentTarget)); // возвращаем -1 каждый раз }

...