PDA

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


Vishapakahr
02.12.2009, 19:45
даже не знал как назвать тему )) вопрос состаится в следующем

у меня на сервере (скажем в локахосте) динамически обнавляются картинки,
и получаю я всю информацию от XML .

XML у меня скаже такова вида

<images>
<img src="test/images/pic1" width="100" height="100"/>
<img src="test/images/pic2" width="100" height="100"/>
<img src="test/images/pic3" width="100" height="100"/>
<img src="test/images/pic4" width="100" height="100"/>
<img src="test/images/pic5" width="100" height="100"/>
</images>

итак мне нужно загружать все эти картинки в флеш с помощью Loader() ,
и для всеx составлять прелоадери


var host="http://localhost/";
var xmlloader:URLLoader=new URLLoader(new URLRequest(host+"slideshow.xml?p="+Math.random()));

xmlloader.addEventListener(Event.COMPLETE,done);

function done(e:Event){
var imgn=0; //попробуем считать количество картинок в XML е
var xmldata:XML=new XML(e.target.data);
var pics:Array=new Array();
var percents:Array=new Array();
while(xmldata.img[imgn]!=undefined){
pics[imgn]=new Loader();
pics[imgn].contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,loading);
pics[imgn].contentLoaderInfo.addEventListener(Event.COMPLETE,loaded);
pics[imgn].load(new URLRequest(host+xmldata.img[imgn].@src));
percents[imgn]=new TextField();
if(imgn%5==0){
pics[imgn].x=0;
pics[imgn].y=0;
percents[imgn].x=pics[imgn].x;
percents[imgn].y=pics[imgn].y;
}else{
pics[imgn].x=pics[imgn-1].x+Number(xmldata.img[imgn-1].@width);
pics[imgn].y=100*(imgn-imgn%5)/5;
percents[imgn].x=pics[imgn].x;
percents[imgn].y=pics[imgn].y;
}
percents[imgn].text="";
addChild(percents[imgn]);



/********вот здесь будьте внимательнее , потомучто у меня проблема именна на этом месте , если я буду использовать функции loading и loaded то в цикле while он сработывать не будет , потомучто цикл наверно выполняется очень быстро а для загрузки картинок должно уйти некоторое время . ***************/

function loading(e:ProgressEvent){
percents[imgn].text=100*(e.bytesLoaded/e.bytesTotal)+"%";
}

function loaded(e:Event){
removeChild(percents[imgn]);
addChild(pics[imgn]);
}
imgn++;
}

}



если картинок будет конечным числом то канечно индивидуально для каждого
я могу решать эту задачу , но даже при огромном количестве это тоже не оптимально ! и так как можно решать эту задачу с помощьу циклов ?? :rolleyes:

xpymbl4
02.12.2009, 20:00
Создайте класс наследник мувиклипа, который грузит изображение, и содержит внутри прелоадер.
Вызовите колличество этих экземпляров, равное длине XML, передавая в каждый экземпляр адрес изображения.
Добавьте каждый из экземпляров на экран.
В каждом экземпляре слушайте завершение загрузки и соответственно, убирайте прелоадер в каждом экземпляре.

Добавлено через 4 минуты
Если изображения большие и хотите чтобы все загрузалось по очереди, вызывайте каждый последующий экземпляр, дождавшись загрузки предыдушейго. Хотя, думаю, именно так это само работает.

Vishapakahr
02.12.2009, 20:20
Создайте класс наследник мувиклипа, который грузит изображение, и содержит внутри прелоадер.
Вызовите колличество этих экземпляров, равное длине XML, передавая в каждый экземпляр адрес изображения.
Добавьте каждый из экземпляров на экран.
В каждом экземпляре слушайте завершение загрузки и соответственно, убирайте прелоадер в каждом экземпляре.

Добавлено через 4 минуты
Если изображения большие и хотите чтобы все загрузалось по очереди, вызывайте каждый последующий экземпляр, дождавшись загрузки предыдушейго. Хотя, думаю, именно так это само работает.

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

и притом если даже нужно загружать по очереди , то опять проблема с циклами .

смотри


function loaded(e:Event){
/*тут удалять первый прелоадер и начать обьявлять другой лоадер и функцию loaded1()*/
function loaded1(e:Event){
/*тут удалять второй прелоадер и начать обьявлять другой лоадер и функцию loaded2()*/
function loaded2(e:Event){
..... тоже самое
.............................................
.............................................
............................................. и.т.д.
}
}
}


а такой последовательность как можно организовать с помощью циклов ?

xpymbl4
02.12.2009, 20:38
По вышенаписанной рекомендации все получится именно так как Вы хотите.

Hidest
03.12.2009, 03:38
Используйте события, а не циклы. Картинка загрузилось, пришло событие об этом - начали загружать следующее и т.д. Это про последовательную загрузку. А так вам уже посоветовали с расширением класса MovieClip (или Sprite) - каждый из них будет грузить что надо независимо и не нужно никаких циклов для загрузки (в цикле нужно просто создавать экземпляры этих классов с передачей урла в них, складировать для удобства ссылки на них в массив и т.д.)... А вся остальная логика по загрузки и управлению прелоадером будет в них самих.

etc
03.12.2009, 09:15
Название темы не отражает сути вопроса.