![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
+1, Не стоит так делать.
|
|
|||||
|
Регистрация: Jun 2010
Сообщений: 18
|
Как я понимаю, нужно делать так:
import flash.display.BitmapData; // массив для битмапов var aBitmapLst:Array= Array(); // загрузка картинки в битмапу function load_pic(iIdx, sUrl, target) { var mcl:MovieClipLoader = new MovieClipLoader(); var Listener:Object = new Object(); Listener.onLoadInit = function(mc) { aBitmapLst[iIdx]= new BitmapData(100, 100, false, 0x000000); aBitmapLst[iIdx].draw(mc); mc.attachBitmap(aBitmapLst[iIdx], 1, 'auto', true); }; mcl.addListener(Listener); mcl.loadClip(sUrl, target); } // запускаем загрузку и отрисовку load_pic(1, '1.jpg', mc1); load_pic(2, '2.jpg', mc2); load_pic(3, '3.jpg', mc3); ? |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
iIdx внутри onLoadInit будет имхо не определен.
|
|
|||||
|
Регистрация: Jun 2010
Сообщений: 18
|
Нет, trace показывает что всё нормально.
Но суть не в этом. Вот в итоге работы этого кода постепенно заполняется массив aBitmapLst объектами типа BitmapData, которые для вывода в MovieClip нужно потом draw() и attachBitmap() ? Вот этот шаманиз меня путает. Я думал что Draw для отрисовки картинки на клип достаточно но везде где я находил примеры готового кода используется ещё и attachBitmap. Зачем? Ну и ещё столкнулся с неприятным. При работе, я проверяю загружена-ли уже эта картинка в массив или простым условием if ( aBitmapLst[ iIdx ] == undefined ) { // не загружена, загружаем load_pic(iIdx, 'адрес катинки', клип_загрузки); } Как тут быть? Как проверить что элемент массива заполнен картинкой? Через typeof() или есть что-нибудь типа empty() / isset() из php? |
|
|||||
|
Модрон-ветеринар
|
Цитата:
Метод attachBitmap - это метод класса MovieClip (MovieClip.attachBitmap method) - служит для заполнения мувиклипа картинкой из битмапы. Цитата:
Последний раз редактировалось mooncar; 11.07.2010 в 19:39. |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 18
|
Ага, теперь я понял. Очевидную вещь не заметил
Ведь после создания битмапа в массив он (битмап) ничем не заполняется, тут и нужен draw. А потом уже аттач для вывода на нужный мувик. Спасибо!А как проверять элемент массива на загрузку битмапы? |
|
|||||
|
Модрон-ветеринар
|
А зачем? Заполняй элементы сразу гарантировано.
Загрузил картинку в контейнер - раз, дальнейшие действия только внутри onLoadInit: отрисовал его в битмапу - два, занес битмапу в массив - три, удалил или выгрузил контейнер - четыре. Например если загрузки делаются циклом, то всю эту схему можно еще добавить к прелоадеру 1-го кадра. При этом нужно считать количество сработок onLoadInit. Если равно ожидаемому - переход в рабочий кадр, где все начинает работать. Если сработает обработчик onLoadError - какие-то действия - индикация ошибки с указанием отсутствующей картинки и т.д. Последний раз редактировалось mooncar; 12.07.2010 в 02:04. |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 18
|
Ну, дело в том, что это галерея и она состоит из нескольких страниц. А всего в этой галерее может быть очень много картинок, и посетитель не обязательно будет пролистывать все страницы галереи
Поэтому я и хочу грузить только те картинки, страницы которых он откроет. Но раз он может вернутся обратно, на предыдущие страницы, то грузить в некий кэш - массив битмапов. Да, тут возникает некоторая неприятность - может так быть (на медленных соединениях) что если быстро туда-сюда попереключаться то возникнет несколько паралельно качающих одну и ту-же битмапу потоков. Но об этом я пока не думал, у меня пока с простым случаем не получается.В итоге ншёл ошибку и исправил - попутал с индексами. Теперь обнаружился новый странный момент: если запускать по F12 из флеша, то всё грузится,страницы листаются и вдно что при переходе назад картинки берутся из кэша (сразу появляются, без моргания) но вот если запустить этот флеш в браузере то вместо картинок рисуется посто квадрат зилитый цветом из параметра в "new BitmapData()". Я думал дело в правах на домен, ведь картинки качаются с другого сайта однако нет - без битмапы всё прекрасно грузится. И что окончательно меня добило - если в конце функции Listener.onLoadInit добавить строку то картинки появляются! Разумеется, полупрозрачные. Игра с альфой ни к чему не привела, при альфа 0 ничего нет даже пустого квадрата, при альфа 100 - только квадрат. Что за фигня проиходит? почему именно в браузере? Проверял в опере и мазиле - один и тот-же эффект. Правда у меня флеш 9, а в браузерах плеер 10.1, может поэтому?В настройках флеша при экспорте стоит Flash 9, AS 2 Последний раз редактировалось Бармалейкин; 12.07.2010 в 04:00. |
|
|||||
|
Модрон-ветеринар
|
Бармалейкин, покажите текущий код.
|
|
|||||
|
Регистрация: Jun 2010
Сообщений: 18
|
Собственно вот две функции. Первая с битмапами и тот глюк что я описал, а вторая без битмапов и всегда грузит нормально (в браузере тоже)
function load_pic(mc_targ, i, sUrl) { var mcl:MovieClipLoader = new MovieClipLoader(); var Listener:Object = new Object(); Listener.onLoadInit = function(mc) { aBitmapLst[i]= new BitmapData(90, 90, false, 0xE0E0E0); aBitmapLst[i].draw(mc); mc.attachBitmap(aBitmapLst[i], 10000, 'never', false); }; mcl.addListener(Listener); mcl.loadClip(sUrl, mc_targ); } function load_pic2(mc_targ, sUrl) { var mcl:MovieClipLoader = new MovieClipLoader(); mcl.loadClip(sUrl, mc_targ); } Вызов тоже простой: // если картинка не загружена - грузим if ( typeof(aBitmapLst[i])== 'undefined' ) { load_pic(gal_list["img"+iIdx].pict, i, sLoadUrl); } else { gal_list["img"+iIdx].pict.attachBitmap(aBitmapLst[i], 1, 'auto', true); } // заполняем карточку // load_pic2(gal_list["img"+iIdx].pict, sLoadUrl); Сегодня вечером попробую выкусить в отдельную флешку только галерею. Может так пойму в чём дело... да, эта флешка (с галереей) загружается моим-же лоадером. Но проблемы с путями к мувам нет, я поверял. Т.е. ещё одна разница между запуском в браузере и из флеша это то, что в браузере сперва грузится лоадер который грузит галерею. |
![]() |
![]() |
Часовой пояс GMT +4, время: 04:27. |
|
|
« Предыдущая тема | Следующая тема » |
|
|