PDA

Просмотр полной версии : MovieClipLoader.loadClip не вызывается


Ghost_real
17.07.2008, 17:58
Гружу по очереди картинки MovieClipLoader'ом и записываю их в BitmapDat'у..


function loadImages(sf:Number) {

z=sf;
flag=true;

while(loaded_images[images[z]]) {
z++;
if(z>sizeOf(images)) {
flag=false;
break;
}
}

if(flag) {
cc=z;
if(mcl.loadClip(images[z],preloader)) {
trace("ок");
} else {
trace("ошибка");
}
} else {
trace("загрузка выполнена");
}
}

loaded_images - массив логических переменных, если картинка уже загружена - true.

images - массив с именами файлов для загрузки


listener.onLoadInit = function(tc:MovieClip) {
pre_bmd[images[cc]] = new BitmapData(266, 196);
pre_bmd[images[cc]].draw(tc, mtx);
loaded_images[images[cc]]=true;

mcl.unloadClip(tc);

loadImages(cc);
}


mcl.loadClip отказывается загружать некоторые картинки..пути к файлам проверил - все правльно.
Из-за чего это еще может быть?

chingachgoog
17.07.2008, 19:27
mcl.loadClip отказывается загружать некоторые картинки..пути к файлам проверил - все правльно.
Из-за чего это еще может быть?

А размер картинок в пикселях какой?

Ghost_real
17.07.2008, 19:36
У всех одинаковый, 266х196.

chingachgoog
17.07.2008, 19:43
А что говорит onLoadError? Срабатывает или нет? (можно еще трейс поставить в onLoadInit - всегда ли будет срабатывать?)
Тестируете где: в сети или локально?
Если в сети - то может не грузить по кроссдоменной политике, а если локально - то может не грузить, если в пути есть нелатинские символы.
Тестируйте, чем отличаются загружаемые файлы от незагружаемых.

crazyone
17.07.2008, 19:51
Вот так вот:
pre_bmd[images[cc]] = new BitmapData(266, 196);

Лучше никогда не делайте. Потому что в images[cc] у вас пути к файлам, т.е. - строки текста. А в них могут содержаться недопустимые символы для имени объектов во флеше(например - слеши).
В итоге - эта строчка может не сработать. Кстати, возможно, именно из-за этого у вас и проблемы.
Хотя - у вас очень скверный стиль программирования, сложно читается, потому могут быть и другие ошибки. Поработайте над ним обязательно.

chingachgoog
17.07.2008, 20:00
А в них могут содержаться недопустимые символы для имени объектов во флеше(например - слеши).


z=_root.createEmptyMovieClip("12///|||\\\3",1)
trace(z._name)

crazyone
17.07.2008, 20:29
z=_root.createEmptyMovieClip("12///|||\\\3",1)
trace(z._name)

Я тоже так когда-то думал.
И у меня тоже была загрузка картинок.
И я трое суток разобраться не мог, что же не так с флешкой.
Не помню точно, но под каким-то браузером работало, а под каким-то - нет.
Стал давать другие имена - и все стало прекрасно работать.

chingachgoog
17.07.2008, 21:48
Дело в том, что имя объекта (когда оно задается строкой!) может быть любым (тут не действуют ограничения, например, что нельзя начинать с цифры и т.п.
Но надо потом умудриться еще по такомуже имени и обратиться к объекту (см. во что превратились последние два символа в примере выше) ПРАВИЛЬНО (т.е. также строково!).

crazyone
18.07.2008, 11:40
Если у меня есть только строки с именами, как еще я к нему могу обратиться?

Я вам говорю - есть такая бага. Или была в восьмом флешплеере под какой-то из браузеров. Может пофиксили уже, я не проверял. В любом случае, какой смысл рисковать? Почему не использовать индекс этой строки в массиве?

chingachgoog
18.07.2008, 13:05
Если у меня есть только строки с именами, как еще я к нему могу обратиться?



12///|||\\\3.stop() // вряд ли что выйдет :)
_root["12///|||\\\3"].stop() // вполне корректно


Ну уж я не знаю, как у вас баг вышел :)
От флеша всего можно ожидать и бага тоже - тут не спорю.

А вообще интересно, что там у Ghost_real было - куда-то он пропал...