Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Отследить загрузку нескольких объектов (http://www.flasher.ru/forum/showthread.php?t=211072)

Godwarlock 19.06.2015 21:24

Отследить загрузку нескольких объектов
 
Всем привет. Всю голову уже сломал и так делал, и так, не получается что-то. В общем в цикле прогружаю определенные картинки
Код AS3:

for (i = 0; i < item_len; i++)
                                {
 
                                        slot = new Loader();
                                        slotURLReq = new URLRequest('какой-то урлшник с картинкой');
                                        slot.contentLoaderInfo.addEventListener(Event.COMPLETE, slot_complete);
                                        slot.load(slotURLReq);
                                }
 
        private function slot_complete(e:Event):void
                {
                      slot.contentLoaderInfo.removeEventListener(Event.COMPLETE, slot_complete);
                              object_arr.push(slot);
                                j++;
                                if (j == item_len)
                                {
                                        j = 0;
                                        for (var k:int = 0; k < object_arr.length; k++)
                                        {
                                                object_arr[k].x = 350 + k * 60;
                                                object_arr[k].y = 365;
                                                addChild(object_arr[k]);
                                        }
                                        object_arr.splice(0);
}

Это последняя бредовая идея, которая тоже нефига не работает). Получается так, что последний созданный объект ложится поверх предыдущего, игнорируя координаты, то есть объект должен быть чуть правее от предыдущего. Собственно, вопрос, как же все таки мне отследить, что все объекты были загружены? Я попытался это сделать таким образом, но это не работает. Нужно убедиться, что все объекты были 100% подгружены и с ними можно было работать в дальнейшем.

udaaff 19.06.2015 21:47

Загрузить одну картинку, взять её битмапдату и работать с непосредственно с ней не подходит? Или url меняется в цикле?

ZackMercury 19.06.2015 21:48

В идеале код ужасен, очень ужасен, прямо ваще жесть.
Но я не буду ничего править, просто чтобы заработало может так?

Код AS3:

for (i = 0; i < item_len; i++)
                                {
 
                                        slot = new Loader();
                                        slotURLReq = new URLRequest('какой-то урлшник с картинкой');
                                        slot.contentLoaderInfo.addEventListener(Event.COMPLETE, slot_complete);
                                        slot.load(slotURLReq);
                                }
 
        private function slot_complete(e:Event):void
                {
                      (e.currentTarget as Loader).contentLoaderInfo.removeEventListener(Event.COMPLETE, slot_complete);
                              object_arr.push(e.currentTarget as Loader);
                                j++;
                                if (j == item_len)
                                {
                                        j = 0;
                                        for (var k:int = 0; k < object_arr.length; k++)
                                        {
                                                object_arr[k].x = 350 + k * 60;
                                                object_arr[k].y = 365;
                                                addChild(object_arr[k]);
                                        }
                                        object_arr.splice(0);
}


Godwarlock 19.06.2015 22:10

udaaffда, url меняется в цикле, в этом и запара.
ZackMercury
не, так ваще не работает никак.
Цитата:

В идеале код ужасен, очень ужасен, прямо ваще жесть.
Да это понятное дело))Но я фиг знаю как по циклу это дело отследить еще. Однозначно нужно убеждаться, что данный объект был загружен и соответственно если их несколько, значит и учитывать надо несколько. Я попытался так сделать, но вышло криво и тупо) Все работает на ура если не отслеживать загрузку объекта
Код AS3:

slot = new Loader();
                                        slotURLReq = new URLRequest('какой-то урлшник с картинкой');
                                        slot.load(slotURLReq);
slot.x = 350 + i*60;
slot.y = 365;
addChild(slot);

НО, этот вариант меня не устраивает совсем, одна из причин - это качество картинки идет к чертям, а мне надо все эти картинки по битмапам раскидать, но чтобы закинуть их в битмап, сначала нужно отследить их загрузку. Чтобы потом расставить их грамотно, нужно отследить загрузку всех объектов)

ZackMercury 19.06.2015 22:25

Цитата:

не, так ваще не работает никак.
Должно работать, если нет, то я даже не знаю, как понимать вашу логику.
Ааа, секунду, неее, точно, currentTarget... Это contentLoaderInfo. Я подзабыл немного.
В таком случае вот так:
Код AS3:

for (i = 0; i < item_len; i++)
                                {
 
                                        slot = new Loader();
                                        slotURLReq = new URLRequest('какой-то урлшник с картинкой');
                                        slot.contentLoaderInfo.addEventListener(Event.COMPLETE, slot_complete);
                                        slot.load(slotURLReq);
                                      object_arr.push(slot);
                                }
 
        private function slot_complete(e:Event):void
                {
                      e.currentTarget.removeEventListener(Event.COMPLETE, slot_complete);
                                j++;
                                if (j == item_len)
                                {
                                        j = 0;
                                        for (var k:int = 0; k < object_arr.length; k++)
                                        {
                                                object_arr[k].x = 350 + k * 60;
                                                object_arr[k].y = 365;
                                                addChild(object_arr[k]);
                                        }
                                        object_arr.splice(0);
}

Вот только object_arr.splice(0) может всё вам испортить.

Godwarlock 19.06.2015 22:51

Спасибо) Вот так работает. Правда код все равно стремный, надо бы его как то переделать пограмотнее чтоль

ZackMercury 20.06.2015 00:16

Godwarlock, рекомендую не писать с бодуна код за 3 секунды, а хоть немного думать о красивой структуре.
Упор не в скорость а в красоту(элегантность), читаемость и порядок.

Godwarlock 20.06.2015 00:21

Цитата:

Сообщение от ZackMercury (Сообщение 1183875)
Godwarlock, рекомендую не писать с бодуна код за 3 секунды, а хоть немного думать о красивой структуре.
Упор не в скорость а в красоту(элегантность), читаемость и порядок.

Именно раздумье и его непродуктивность привело меня к такому варианту)
p.s
Я еще конечно подумаю над вариантами. В прочем есть один на уме, сейчас попытаюсь его грамотно реализовать

Добавлено через 20 минут
Код AS3:

private function add_slot():void 
                        {
                                slot = new Loader();
                                slotURLReq = new URLRequest(MW.host_name + json_obj.error[i].url);
                                slot.contentLoaderInfo.addEventListener(Event.COMPLETE, slot_complete);
                                slot.load(slotURLReq);
                        }
private function slot_complete(e:Event):void
                {
                        slot.removeEventListener(Event.COMPLETE, slot_complete);
                        i++;
                        bmp = slot.content as Bitmap;
                        bmp.smoothing = true;
                        bmp.x = 350 + i * 60;
                        bmp.y = 365;
                        slot_sprite.addChild(bmp);
                        if (i < item_len)
                        {
                                add_slot();
                        }else
                        {
                                //Типо закончили скрипт
                        }
                }

Сделал так, вроде как лучше и тем самым избавился от циклов

GBee 20.06.2015 00:54

Есть же готовые булклоадеры и прочее. Смысл в последовательной загрузке?

Godwarlock 20.06.2015 00:58

Цитата:

Сообщение от GBee (Сообщение 1183879)
Есть же готовые булклоадеры и прочее. Смысл в последовательной загрузке?

Откуда мне знать простому смертному о каких-то там "булклоадерах"?))

ZackMercury 20.06.2015 01:18

GBee, он грузит всё одним махом, и просто хочет по окончанию загрузки всё выровнять.

GBee 20.06.2015 02:54

Цитата:

GBee, он грузит всё одним махом, и просто хочет по окончанию загрузки всё выровнять.
В 8 сообщении не одним.


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

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