Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.07.2010, 14:57
rainbowrussia вне форума Посмотреть профиль Отправить личное сообщение для rainbowrussia Найти все сообщения от rainbowrussia
  № 11  
Ответить с цитированием
rainbowrussia
 
Аватар для rainbowrussia

Регистрация: Feb 2008
Сообщений: 560
Цитата:
Сообщение от Бармалейкин Посмотреть сообщение
Как-бы организовать загрузку так, чтобы не грузить картинки по нескольку раз а однажды загрузить их куда-то а потом просто копировать в тот мувик с рамкой?
+1, Не стоит так делать.

Старый 10.07.2010, 03:20
Бармалейкин вне форума Посмотреть профиль Отправить личное сообщение для Бармалейкин Найти все сообщения от Бармалейкин
  № 12  
Ответить с цитированием
Бармалейкин

Регистрация: Jun 2010
Сообщений: 18
Как я понимаю, нужно делать так:
Код AS1/AS2:
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);
А как теперь в mc3 вывести 1.jpg? Сделать
Код AS1/AS2:
aBitmapLst[1].draw(mc3);
?

Старый 10.07.2010, 03:57
rainbowrussia вне форума Посмотреть профиль Отправить личное сообщение для rainbowrussia Найти все сообщения от rainbowrussia
  № 13  
Ответить с цитированием
rainbowrussia
 
Аватар для rainbowrussia

Регистрация: Feb 2008
Сообщений: 560
iIdx внутри onLoadInit будет имхо не определен.

Старый 11.07.2010, 19:11
Бармалейкин вне форума Посмотреть профиль Отправить личное сообщение для Бармалейкин Найти все сообщения от Бармалейкин
  № 14  
Ответить с цитированием
Бармалейкин

Регистрация: Jun 2010
Сообщений: 18
Нет, trace показывает что всё нормально.
Но суть не в этом. Вот в итоге работы этого кода постепенно заполняется массив aBitmapLst объектами типа BitmapData, которые для вывода в MovieClip нужно потом draw() и attachBitmap() ? Вот этот шаманиз меня путает. Я думал что Draw для отрисовки картинки на клип достаточно но везде где я находил примеры готового кода используется ещё и attachBitmap. Зачем?
Ну и ещё столкнулся с неприятным. При работе, я проверяю загружена-ли уже эта картинка в массив или простым условием
Код AS1/AS2:
if ( aBitmapLst[ iIdx ] == undefined ) {
// не загружена, загружаем
load_pic(iIdx, 'адрес катинки', клип_загрузки);
}
Но почему-то он не работает... Т.е. после первых 10 загруженных картинок всегда по условию получается что любой элемент массива отвечает как существующий и код перестаёт работать Как тут быть? Как проверить что элемент массива заполнен картинкой? Через typeof() или есть что-нибудь типа empty() / isset() из php?

Старый 11.07.2010, 19:34
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 15  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Цитата:
Сообщение от Бармалейкин Посмотреть сообщение
Я думал что Draw для отрисовки картинки на клип достаточно но везде где я находил примеры готового кода используется ещё и attachBitmap. Зачем?
Метод draw - это метод класса битмапы (BitmapData.draw method) - служит для заполнения вновь созданного экземпляра битмапы рисунком из мувика.
Метод attachBitmap - это метод класса MovieClip (MovieClip.attachBitmap method) - служит для заполнения мувиклипа картинкой из битмапы.
Цитата:
А как теперь в mc3 вывести 1.jpg? Сделать aBitmapLst[1].draw(mc3);
Нет. Нужно использовать как раз attachBitmap.


Последний раз редактировалось mooncar; 11.07.2010 в 19:39.
Старый 12.07.2010, 01:48
Бармалейкин вне форума Посмотреть профиль Отправить личное сообщение для Бармалейкин Найти все сообщения от Бармалейкин
  № 16  
Ответить с цитированием
Бармалейкин

Регистрация: Jun 2010
Сообщений: 18
Ага, теперь я понял. Очевидную вещь не заметил Ведь после создания битмапа в массив он (битмап) ничем не заполняется, тут и нужен draw. А потом уже аттач для вывода на нужный мувик. Спасибо!
А как проверять элемент массива на загрузку битмапы?

Старый 12.07.2010, 01:57
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 17  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Цитата:
Сообщение от Бармалейкин Посмотреть сообщение
А как проверять элемент массива на загрузку битмапы?
А зачем? Заполняй элементы сразу гарантировано.
Загрузил картинку в контейнер - раз, дальнейшие действия только внутри onLoadInit: отрисовал его в битмапу - два, занес битмапу в массив - три, удалил или выгрузил контейнер - четыре.

Например если загрузки делаются циклом, то всю эту схему можно еще добавить к прелоадеру 1-го кадра. При этом нужно считать количество сработок onLoadInit. Если равно ожидаемому - переход в рабочий кадр, где все начинает работать.
Если сработает обработчик onLoadError - какие-то действия - индикация ошибки с указанием отсутствующей картинки и т.д.


Последний раз редактировалось mooncar; 12.07.2010 в 02:04.
Старый 12.07.2010, 02:20
Бармалейкин вне форума Посмотреть профиль Отправить личное сообщение для Бармалейкин Найти все сообщения от Бармалейкин
  № 18  
Ответить с цитированием
Бармалейкин

Регистрация: Jun 2010
Сообщений: 18
Ну, дело в том, что это галерея и она состоит из нескольких страниц. А всего в этой галерее может быть очень много картинок, и посетитель не обязательно будет пролистывать все страницы галереи Поэтому я и хочу грузить только те картинки, страницы которых он откроет. Но раз он может вернутся обратно, на предыдущие страницы, то грузить в некий кэш - массив битмапов. Да, тут возникает некоторая неприятность - может так быть (на медленных соединениях) что если быстро туда-сюда попереключаться то возникнет несколько паралельно качающих одну и ту-же битмапу потоков. Но об этом я пока не думал, у меня пока с простым случаем не получается.

В итоге ншёл ошибку и исправил - попутал с индексами. Теперь обнаружился новый странный момент:
если запускать по F12 из флеша, то всё грузится,страницы листаются и вдно что при переходе назад картинки берутся из кэша (сразу появляются, без моргания) но вот если запустить этот флеш в браузере то вместо картинок рисуется посто квадрат зилитый цветом из параметра в "new BitmapData()". Я думал дело в правах на домен, ведь картинки качаются с другого сайта однако нет - без битмапы всё прекрасно грузится. И что окончательно меня добило - если в конце функции Listener.onLoadInit добавить строку
Код AS1/AS2:
mc._alpha= 50;
то картинки появляются! Разумеется, полупрозрачные. Игра с альфой ни к чему не привела, при альфа 0 ничего нет даже пустого квадрата, при альфа 100 - только квадрат. Что за фигня проиходит? почему именно в браузере? Проверял в опере и мазиле - один и тот-же эффект. Правда у меня флеш 9, а в браузерах плеер 10.1, может поэтому?
В настройках флеша при экспорте стоит Flash 9, AS 2


Последний раз редактировалось Бармалейкин; 12.07.2010 в 04:00.
Старый 12.07.2010, 04:10
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 19  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Бармалейкин, покажите текущий код.

Старый 12.07.2010, 19:34
Бармалейкин вне форума Посмотреть профиль Отправить личное сообщение для Бармалейкин Найти все сообщения от Бармалейкин
  № 20  
Ответить с цитированием
Бармалейкин

Регистрация: Jun 2010
Сообщений: 18
Собственно вот две функции. Первая с битмапами и тот глюк что я описал, а вторая без битмапов и всегда грузит нормально (в браузере тоже)

Код AS1/AS2:
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);
}
В первой функции была ошбка с индексом - он там был всегда от 0 до 9, т.е. индекс ячейки на странице. Теперь там именно номер картинки, и это решило проблему "загрузки первой страницы только". Параметр i. Остальные два параметра у этих функций одинаковые.
Вызов тоже простой:
Код AS1/AS2:
	// если картинка не загружена - грузим
		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);
Тут gal_list - муфик с набором из 10 мест под картинки, соотв. это мувы img+номер, в каждом муве вложен Graphics с именем pict. Внего-то и грузится картинка. i - тут работает аналогично, это сковзной индекс/номер картинок в галерее а iIdx номер мува на странице.
Сегодня вечером попробую выкусить в отдельную флешку только галерею. Может так пойму в чём дело... да, эта флешка (с галереей) загружается моим-же лоадером. Но проблемы с путями к мувам нет, я поверял. Т.е. ещё одна разница между запуском в браузере и из флеша это то, что в браузере сперва грузится лоадер который грузит галерею.

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:27.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 04:27.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.