PDA

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


Zhihar
05.07.2009, 19:55
Приветствую

стоит задача:

есть куча картинок (*.jpg)

необходимо:
отрисовать их в кадре, расположил в таблице NxM
сжать картинки до размер WxH

т.е. у меня есть заготовка - MovieClip где в нижнем слое должна стоять такая картинка


Вопрос: как это лучше реализовать?
Вообще реально ли это сделать с картинками с диска или их все надо импортировать в клип?

udaaff
05.07.2009, 22:58
Не надо ничего импортировать в клип, все реально сделать =). Читайте документацию по классу MovieClipLoader.

alekslitvinenk
05.07.2009, 23:05
я думаю, что если человеку надо загрузить картинку с диска, то MovieClipLoader - излишество :)

Zhihar
06.07.2009, 16:40
тогда как реализовать?
хотелось бы просто закидывать новую картинку на диск и она тут же появлялась бы в ролике без каких-либо дополнительных прописываний

dimarik
06.07.2009, 16:46
тогда как реализовать?
хотелось бы просто закидывать новую картинку на диск и она тут же появлялась бы в ролике без каких-либо дополнительных прописываний

FP не умеет получать список файлов в директории. Именуйте файлы сквозной нумерацией, а во флешке сделайте условия загрузки "до тех пор, пока есть такой файл". Например, у Вас есть список файлов поименованных
image_1.jpg
image_2.jpg
image_3.jpg

Используйте MovieClipLoader. У него есть возможность узнать об ошибке загрузки.

Zhihar
06.07.2009, 23:43
возникли вопросы:

1) сделал простой примерчик


for (nImageID = 1; nImageID < 2; ++ nImageID)
{
this.createEmptyMovieClip("mcOther" + nImageID, this.getNextHighestDepth());

MovieClipLoader.loadClip("D:\\Sites\\works\\other\\other_" + nImageID + ".jpg", "mcOther" + nImageID);

}

выдает ошибку

The property being referenced does not have the static attribute.

в чем дело?

неужто надо так:

var pObject:MovieClipLoader;

for (nImageID = 1; nImageID < 2; ++ nImageID)
{
this.createEmptyMovieClip("mcOther" + nImageID, this.getNextHighestDepth());

pObject.loadClip("D:\\Sites\\works\\other\\other_" + nImageID + ".jpg", "mcOther" + nImageID);

}


тогда ошибка не выдается, но и изображение не выводится


Если использую просто loadMovie - изображение выводится, но возникает проблема из п3 (см ниже)

2) чтобы узнать загрузилось или нет после loadClip необходимо посмотреть что содержится в checkPolicyFile?

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

alekslitvinenk
06.07.2009, 23:55
вам необходимо создать экземпляр MovieClipLoadera
var pObject:MovieClipLoader = new MovieClipLoader();
для каждого загружаемого объекта нужен свой экземпляр MovieClipLoadera.
Но в вашем случае, так вы грузите все локально, я бы все-таки предпочел пользоваться обычным loadMovie, а перед тем как выполнять какие-либо операции с только что загруженным объектом - сделал бы задержку 100-200 милисекунд.

Zhihar
07.07.2009, 00:22
но через loadMovie я не смогу узнать загрузил я файл или не загрузил

я хочу выкладывать к себе на сайт изображения и чтобы флеш их подхватывал сразу


кстати а зачем нужна загрузка?

Добавлено через 4 минуты
хотя loadClip почему-то всегда возвращает у меня true, хотя одной картинки с названием other_3.jpg не существует - непонятно

alekslitvinenk
07.07.2009, 01:01
так вам это все для сайта нужно ?

Zhihar
07.07.2009, 01:59
ну да - чтобы не менять каждый раз флеш когда появляются новые изображения
хочется тобы это было автоматически - просто выложил картинки и все
на PHP это сделать в 2 строчки, но вот решил на флеше сделать сайтик целиком

dimarik
07.07.2009, 13:14
для каждого загружаемого объекта нужен свой экземпляр MovieClipLoadera.
Неправда. Достаточно одного экземпляра.

Но в вашем случае, так вы грузите все локально, я бы все-таки предпочел пользоваться обычным loadMovie, а перед тем как выполнять какие-либо операции с только что загруженным объектом - сделал бы задержку 100-200 милисекунд.

Еще раз повторяю, что на MCL можно навесить хэндлер IO_Error. loadMovie прошлый век.

iNils
07.07.2009, 13:22
Но в вашем случае, так вы грузите все локально, я бы все-таки предпочел пользоваться обычным loadMovie, а перед тем как выполнять какие-либо операции с только что загруженным объектом - сделал бы задержку 100-200 милисекунд.Помогаем плодить быдлокодеров?

dimarik
07.07.2009, 13:48
я тут накидал немного кода.

var container: MovieClip = this.createEmptyMovieClip('container', this.getNextHighestDepth());
var pattern: String = 'http://somedomain.ru/images/image_{d}.jpg';

var mcl:MovieClipLoader = new MovieClipLoader();
this.mcl.addListener(this);

var imageCounter:Number = 0;

//-----------------------------------------------------------------------------
//
// Private methods
//
//-----------------------------------------------------------------------------

function loadNext():Void {
this.mcl.loadClip( this.substitute(pattern, String(++this.imageCounter)), this.container);
}

function substitute():String {
var temp: Array = arguments[0].split("{d}");
var i: Number = temp.length;
if (i-- > 1) while (i--) temp[i] += arguments[i + 1];
return temp.join('');
}

//-----------------------------------------------------------------------------
//
// Events handlers: MovieClipLoader
//
//-----------------------------------------------------------------------------

function onLoadInit(target:MovieClip):Void {
// Do something and go on next image
this.loadNext();
}

function onLoadError(target_mc:MovieClip, errorCode:String, httpStatus:Number):Void {
// Check httpStatus
switch (httpStatus) {
case 404: // Not found. Loading job done! Clean up unnecessary.
this.mcl.removeListener(this);
delete this.mcl;
// Do other job
break;

default: // Try once more
this.imageCounter--;
this.loadNext();
}
}


//~~~~~~~~~~~~~~~~~~~~~~~~
//
// Entry Point
//
//~~~~~~~~~~~~~~~~~~~~~~~~
this.loadNext();


Работоспособность не проверял. В статусы нужно добавить что-то еще. Разные они бывают.

alekslitvinenk
07.07.2009, 15:46
Неправда. Достаточно одного экземпляра.
Согласен, оговорился. Просто раньше помню обсуждался баг MovieClipLoader-а когда он некорректно работал при одновременной загрузке через него более 10-ти объектов.
Помогаем плодить быдлокодеров?
Никого я с пути истинного сбивать не пытался, а подсказал самый лекгий и понятный для новичков вариант.