PDA

Просмотр полной версии : загрузка images в определенное место в vector


DanQuimby
21.02.2011, 12:13
столкнулся с проблемой как загрузка изображений в определенную ячейку


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


<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
Можно сразу добавлять объект куда вам нужно, еще до загрузки.

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


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

cleptoman
21.02.2011, 14:03
примерно так:

в главном классе
var image:GameImage = new GameImage(e.target.loader,somePosition);
image.addEventListener(Event.COMPLETE,checkConpleteCount);
...
private function checkConpleteCount(e.Event):void{
//do smt;
}

в классе GameImage

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() клон делать низя , как я понял ? ...
почему нельзя, просто грохайте сорс, если он вам не нужен больше.

DanQuimby
21.02.2011, 14:13
public class GameImage
{

public function GameImage(file:String , call:Function)
{
_call = call;
var imageHolder:Sprite = new Sprite();
//Создается загружчик картинок.
var imageLoader:Loader = new Loader();
//Добавляем загрузчик в кнопку.
imageHolder.addChild(imageLoader);
//number_load_image = image.number;
imageLoader.load(new URLRequest(file));

//Слушатель на завершение загрузки.
imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);

}
public function get data():BitmapData
{
return m_data;
}
//---------------------------------------------
private function imageLoaded(e:Event):void
{
m_data = e.target.content.bitmapData;
_call.call();
}
//---------------------------------------------
private var _call:Function;
private var m_data:BitmapData;

}


сделал вот так , работает ...
а выше я добавил в массив .

просто грохайте сорс, если он вам не нужен больше.

что есть сорс ...

еще вопрос , как можно указать в fd точный размер флеша.

cleptoman
21.02.2011, 14:14
исходная битмапДата e.target.content.bitmapData есть сорс

Project > Properties

DanQuimby
21.02.2011, 14:17
)))) я лохушка :)
cleptoman спасибо , больше вопросов пока нет :) ... про проперти в FD даже и не подумал))))