PDA

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


Amra Kimmerian
18.04.2007, 11:35
Здравствуйте!
Зависает (выдает предложение остановить выполнение скрипта) компьютер при исполнении вот этого кода:
picPrewLoad = function (way:String) {
var mc_loader:MovieClipLoader = new MovieClipLoader();
var mc_Listener:Object = new Object();
mc_loader.addListener(mc_Listener);
while (_global.picPrewFlag) {
//_global.picPrewFlag = false;
_global.picPrewCounter++;
trace(_global.picPrewCounter);
_root.mc_picPrew.createEmptyMovieClip("picPrew"+_global.picPrewCounter, _global.picPrewCounter);
mc_loader.loadClip(way+_global.picPrewCounter+".jpg", _root.mc_picPrew["picPrew"+_global.picPrewCounter]);
mc_Listener.onLoadError = function() {
_global.picPrewFlag = false;
trace("picPrew load error!");
};
}
};
Картинки специально нет - хочу чтобы цикл прерывался сразу. Функция вызывается нажатием на кнопку. Трассировщик успевает отобразить значения _global.picPrewCounter до 7000-8000. Но вот trace("picPrew load error!") никогда не появлялся - т.е. события onLoadError как будто не было.
Если активизирую неактивную в коде строку, не виснет, ну оно понятно.
Если цикл while ставлю в /* ... */ ничего, естественно не виснет.
Искал по поиску слово "while" - нет ни в одном подразделе раздела Flash.
Почитал help, livedoc - все ясно и понятно.
С MovieClipLoader()-ом посложнее, взял их хелпа пример и переделал под свои клипы. Причем сначала инициализация mc_loader, mc_Listener и mc_loader.addListener стояла в коде в цикле while. Зависало. Подумал, что возможно это из-за постоянного их объявления в цикле, убрал их наверх (как сейчас) - не помогло. По умолчанию _global.picPrewFlag = true при загрузке всего проекта. Вместо него пробовал использовать местную переменную - не помогло.
1. Наверняка уверен что неправильно использую класс MovieClipLoader.
2. Или может листенер с ошибкой используется.
3. А может быть mc_Listener.onLoadError не успевает получить (или отдать) в тело своей функции событие об ошибке, потому что вызывается снова тут же, если вообще так можно сказать.
4. Ну или с адресами напутал (такие конструкции [...]+"...").
Уважаемые форумчане, подскажите, где ошибка/ошибки?

screamge
18.04.2007, 11:46
var mc_loader:MovieClipLoader = new MovieClipLoader();
var mc_Listener:Object = new Object();
_global.picPrewCounter = 0; // начальная фотография
var way:String = "pictures/" // папка с фотографиями

function picPrewLoad (way:String) {
mc_loader.addListener(mc_Listener);
while (picPrewFlag) {
picPrewCounter++;
trace(picPrewCounter);
_root.mc_picPrew.createEmptyMovieClip("picPrew"+ picPrewCpicPrewounter + "_mc", picPrewCounter);
mc_loader.loadClip(way + picPrewCounter + ".jpg", _root["picPrew" + picPrewCpicPrewounter + + "_mc"]);

mc_Listener.onLoadError = function() {
picPrewFlag = false;
trace("picPrew load error!");
};
}
};


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

0xFFFFFF
18.04.2007, 11:47
пока картинка загрузится и picPrewFlag поменяется на false цикл успеет сделать столько оборотов, что вылетит птичка.
фсё плохо, думайте.

screamge
18.04.2007, 11:50
не сразу въехал что нужно, while для этого дела не совсем подходит, локально может и что-то получится, но в нете погибнет.


var folder:String = "gallery/" //nazvanie papki otkuda berutsa fotki
var currentnum:Number = 0; //nomer pervoi fotki


var listen:Object = new Object (); // sozdaem slushatelia
listen.onLoadComplete = function (){ // sobitie po okonchniyu zagruzki
currentnum += 1
loadpic()
}

listen.onLoadError = function (){
trace ("error")
}


function loadpic (){
_root.createEmptyMovieClip("pic" + currentnum + "_mc", currentnum)
loader.loadClip(folder + ["pic" + currentnum + ".jpg"], "pic" + currentnum + "_mc");
}


var loader:MovieClipLoader = new MovieClipLoader ();
loader.addListener(listen)

loadpic ();

так корректнее.

etc
18.04.2007, 12:21
Цикл while создан не для отслеживания подобных загрузок.

Amra Kimmerian
18.04.2007, 15:20
screamge, Белая, __etc, спасибо Вам! Жаль в хелпе не написано "не юзать для подгрузки файлов". Не пропарился бы лишнее время.
Теперь подойду с другой стороны. :umnik2:

Amra Kimmerian
18.04.2007, 16:21
screamge, вставил Ваш код в свой проект, а он не работает. Потом методом всяких размышелний дошел до версии флэш плеера. Посмотрел в хелп, а там MovieClipLoader.class начинается от версии №7. А у меня все под 6 писано. Как мне быть? Переставил весию на 7 - заработало ( :victory: ). Но теперь проблема не только в том что что то не будет работать, а еще и в том, что хочется на 6 версии, которая почти у всех будет проигрываться, сделать. Ох чувствую что от темы, мною же созданной уклоняюсь, но это последний вопрос. В 6 версии каким образом грузились каталоги картинок? Стоит ли? Или большинство пользователей смогут посмотреть проект (сайт)?

etc
18.04.2007, 16:23
Можно использовать loadMovie.

Amra Kimmerian
18.04.2007, 16:39
Вы правы __etc, последние мои вопросы не по теме, основной вопрос исчерапан и пора мне закругляться . Спасибо! :bye: