Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Загрузка картинок в Vector (http://www.flasher.ru/forum/showthread.php?t=173973)

jeanosis 15.01.2012 14:00

Загрузка картинок в Vector
 
Доброго времени суток.
Есть текстовый документ, например, "Трололо |img+1.png+500+400| " и функция, которая разбивает разбивает эту строку на массив, определяет, где текст, а где будет картинка(и), грузит картинку(и) и добавляет все в groupVector.
Нужно, что бы нормально работали imgloader.width & imgloader.height.
Для этого, как я понял, нужно добавить слушатель:
Код AS3:

imgloader.addEventListener(Event.COMPLITE, trololo)

Но как реализовать это так, что бы сохранить очередность добавления элементов в groupVector?

Функция выглядит так:
Код AS3:

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

Цитата:

Сообщение от Stitch512 (Сообщение 1057114)
А поподробнее...

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

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

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

Stitch512 16.01.2012 01:29

Цитата:

Если я правильно понял, то in4core имел ввиду не паралельную загрузку всех ресурсов несколькими Лоадерами, а загрузку ПОСЛЕДОВАТЕЛЬНУЮ!
На сколько я понял, нужно обспечить порядок картинок в массиве groupVector, а не порядок загрузки (по крайней мере вразумительных причин для последовательной загрузки не вижу, кроме увеличения общего времени). И при таком потходе, если одна картинка не загрузилась (всякое бывает...) то не загрузятся и остальные, может так и должно быть, но как минимум нужно добавить обработку ошибок.


Часовой пояс GMT +4, время: 13:48.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.