Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   загрузка images в определенное место в vector (http://www.flasher.ru/forum/showthread.php?t=151010)

DanQuimby 21.02.2011 12:13

загрузка images в определенное место в vector
 
столкнулся с проблемой как загрузка изображений в определенную ячейку

Код AS3:

private function xmlLoaded(e:Event):void
                {
                        //Создаем новый XML объект.
                        xml = new XML(loader.data);
                        xml.ignoreWhitespace = true;
                        number_load_image = 0;
                        //Количестко загружаемых картинок. Значение берется из XML.
                        numberOfImages = xml.number_of_images;
                        //Цикл находит картинки в XML файле.
                        for each (var image:XML in xml.images.image) {
                                var imageHolder:Sprite = new Sprite();
                                //Создается загружчик картинок.
                                var imageLoader:Loader = new Loader();
                                //Добавляем загрузчик в кнопку.
                                imageHolder.addChild(imageLoader);
                                //загружаем картинки.
                                var s:String = image.url;
//                                <number>1</number> номер куда загружаться
                                number_load_image = image.number;
                                //number_load_image = image.number;
                                imageLoader.load(new URLRequest(image.url));
 
                                //Слушатель на завершение загрузки.
                                imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
                        }
                }
                private function imageLoaded(e:Event):void
                {
                        //Обновляем число загруженных картинок.
                        _array_images.push(new GameImage(e.target.content.bitmapData.clone(), number_load_image));
                        numberOfLoadedImages++;
                        //Сглаживаем загруженные картинки (Мы знаем, что загрузчик содержит картинку).
                        e.target.content.smoothing = true;
                        //Проверяем, все ли картинки загруженны.
                        if (numberOfLoadedImages == numberOfImages) {
 
                        //complite.
                                trace("all imeges : " + numberOfLoadedImages);
                                if (_func != null)
                                        _func.call();
 
                        }

mxl

Код AS3:

<image>
<number>0</number>
<url>stone.png</url>
</image>

И number_load_image == 4 , так как он сначала у меня в слушатели загрузчики забивает, то и number_load_image = 4 , то есть все картинки , как сделать
что бы каждая картинка знала куда поместиться (свой ID знала)

mre 21.02.2011 12:47

Для начала, изображения все же лучше грузить последовательно, а не одновременно.
Можно сразу добавлять объект куда вам нужно, еще до загрузки.
Если картинки могут повторяться, лучше использовать загруженную ранее BitmapData и не грузить повторно.

DanQuimby 21.02.2011 12:52

Цитата:

Сообщение от mre (Сообщение 974985)
Можно сразу добавлять объект куда вам нужно, еще до загрузки.

а можно на моем примере показать как это ?
я беру bitmap уже из евента.

mre 21.02.2011 12:57

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

DanQuimby 21.02.2011 13:08

ааа то есть GameImage сам должен озаботиться своим наполнением
так ?

mre 21.02.2011 13:38

Верно.

DanQuimby 21.02.2011 13:45

а еще вопрос , я щас все сделал , но вот как мне проверить
что все images загрузились ?
что бы дальше их использовать.
то есть у меня где то выше написано
LoadImages(XML);
CreateMap(); (использует ресурсы загруженные)

Но дело в том , что не факт что они загрузились , или можно по этому поводу не переживать
или как лучше сделать , я когда то делал просто через таймер паузу в 1 сек ... но это
плохой выход. (((
Тот способ был таков , если все images загружены , я перехожу в кол бек который я даю в конструкторе загрузки.

cleptoman 21.02.2011 13:53

при создании своих GameImage подписывайте их на какое-нибудь событие. например тот же Event.COMPLETE.
внутри, когда поймаете это событие от лоадерИнфо, переданного Loadera просто редиспатчите его .
а наверху считайте количество комплитов и ...все )
либо подписывайте на комплит и внутри GameImage и в главном классе. в последнем просто для подсчета.
да, не забывайте отписываться от событий.
ваша конструкция e.target.content.bitmapData.clone() плодит дубль, но в то же время оригинал со всем своим сарафаном будет висеть в памяти.

DanQuimby 21.02.2011 13:57

Цитата:

Сообщение от cleptoman (Сообщение 975013)
при создании своих GameImage подписывайте их на какое-нибудь событие. например тот же Event.COMPLETE.
внутри, когда поймаете это событие от лоадерИнфо, переданного Loadera просто редиспатчите его .
а наверху считайте количество комплитов и ...все )
либо подписывайте на комплит и внутри GameImage и в главном классе. в последнем просто для подсчета.
да, не забывайте отписываться от событий.
ваша конструкция e.target.content.bitmapData.clone() плодит дубль, но в то же время оригинал со всем своим сарафаном будет висеть в памяти.


e.target.content.bitmapData.clone() клон делать низя , как я понял ? ...
редиспатчите его можно поподробней это как .. .?

cleptoman 21.02.2011 14:03

примерно так:

в главном классе
Код AS3:

var image:GameImage = new GameImage(e.target.loader,somePosition);
image.addEventListener(Event.COMPLETE,checkConpleteCount);
...
private function checkConpleteCount(e.Event):void{
//do smt;
}

в классе GameImage
Код AS3:

public function GameImage(loader:Loader,position:???):void{
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
}
...
private function onComplete(e:Event):void{
this.dispatchEvent(e);
}

Добавлено через 1 минуту
Цитата:

e.target.content.bitmapData.clone() клон делать низя , как я понял ? ...
почему нельзя, просто грохайте сорс, если он вам не нужен больше.


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

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