PDA

Просмотр полной версии : Загрузка картинок в Vector


jeanosis
15.01.2012, 14:00
Доброго времени суток.
Есть текстовый документ, например, "Трололо |img+1.png+500+400| " и функция, которая разбивает разбивает эту строку на массив, определяет, где текст, а где будет картинка(и), грузит картинку(и) и добавляет все в groupVector.
Нужно, что бы нормально работали imgloader.width & imgloader.height.
Для этого, как я понял, нужно добавить слушатель:
imgloader.addEventListener(Event.COMPLITE, trololo)
Но как реализовать это так, что бы сохранить очередность добавления элементов в groupVector?

Функция выглядит так:
elements = str.split("|");
for (var j:uint = 0; j < elements.length; j++) {
var n:uint = Math.round(j / 2 - Math.floor(j / 2));
if (n == 0 && elements[j] != "") {
var textElement:TextElement = new TextElement(elements[j], ef);
groupVector.push(textElement);
}

if (n == 1) {
str = elements[j];
imagein = str.split("+");
var imgloader:Loader = new Loader();
var request:URLRequest = new URLRequest("media/" + imagein[1]);

if (imagein[0] == "img") {
imgloader.load(request, null);
} else if (imagein[0] == "swf") {
var appDomain:ApplicationDomain = new ApplicationDomain();
var context:LoaderContext = new LoaderContext(false, appDomain);
imgloader.load(request, context);
}

var obj:Sprite = new Sprite();
var swidth:Number = imagein[2];
var sheight:Number = imagein[3];;

obj.addChild(imgloader);
imgloader.x = margin / 2;
imgloader.y = margin / 2;
obj.graphics.lineStyle(1, 0x000000, 1);
obj.graphics.beginFill(0xFFFFFF, 0);
obj.graphics.drawRect(0, 0, swidth + margin, sheight + margin);
obj.graphics.endFill();

var graphicElement:GraphicElement = new GraphicElement(obj, obj.width, obj.height, ef);
groupVector.push(graphicElement);
}

Stitch512
15.01.2012, 14:40
Немного не понял вопрос. Если про порядок загрузки, то она во флеше распараллелена, т.е. очередность не гарантируется. А если про порядок расположения в groupVector, то они в примере и так расположены последовательно.

jeanosis
15.01.2012, 14:53
В примере да. Но мне необходимо что бы использовались loader.width & loader.height.
И при этом сохранить порядок расположения.

Stitch512
15.01.2012, 19:53
Тогда, как вариант, в первом цикле сохранить лоадеры в промежуточный массив, а добавление GraphicElement производить по событию COMPLETE. Соответсвенно интекс лоадера в массиве будет соответсвовать индексу в groupVector.

in4core
15.01.2012, 20:45
Грузите 1 ЛОАДРОМ!

Stitch512
15.01.2012, 22:38
Грузите 1 ЛОАДРОМ!
А поподробнее...

elder_Nosferatu
16.01.2012, 01:23
А поподробнее...

Если я правильно понял, то in4core имел ввиду не паралельную загрузку всех ресурсов несколькими Лоадерами, а загрузку ПОСЛЕДОВАТЕЛЬНУЮ!

Так конечно будет немного сложнее, потому, что прийдется загружать текущую картинку, дожидаться окончания ее загрузки, вытаскивать картинку из Лоадер.контент и переходить к загрузке следующей картинки. Продолжать, пока весь список не окажется загруженым.

По завершению этой бубно-ламбады у Вас будут сохранены все картинки (если Вы их вытягивали из Лоадер.контент и запоминали ссылку на них, скажем в массив, вектор или объект). Следовательно можна начинать запихивать у Ваш Обдж:Спрайт, посредством эдЧайлд()

Stitch512
16.01.2012, 01:29
Если я правильно понял, то in4core имел ввиду не паралельную загрузку всех ресурсов несколькими Лоадерами, а загрузку ПОСЛЕДОВАТЕЛЬНУЮ!

На сколько я понял, нужно обспечить порядок картинок в массиве groupVector, а не порядок загрузки (по крайней мере вразумительных причин для последовательной загрузки не вижу, кроме увеличения общего времени). И при таком потходе, если одна картинка не загрузилась (всякое бывает...) то не загрузятся и остальные, может так и должно быть, но как минимум нужно добавить обработку ошибок.