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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.02.2011, 20:40
Prometei1599 вне форума Посмотреть профиль Отправить личное сообщение для Prometei1599 Найти все сообщения от Prometei1599
  № 1  
Ответить с цитированием
Prometei1599

Регистрация: Jun 2010
Сообщений: 65
По умолчанию Предварительная загрузка и создание MovieClip

Добрый вечер коллеги!
Задача состоит в следующем: необходимо из папки загрузить изображения в динамически создаваемые МувиКлипы.
Примерный код привожу ниже:
Код AS1/AS2:
var mcl: MovieClipLoader = new MovieClipLoader();
 
var str:String = "img";
var mcName:String = "mc";
var v:Boolean = false;
var i:Number = 0;
 
do{
	i++;
	v = mcl.loadClip("images/"+str+i+".jpg", mcName+i);
}while(v == true)
Помогите пожалуйста разобраться с тем, как в этом цикле динамически создать МувиКлипы, чтобы можно было загружать в них изображения?

Заранее спасибо!

Старый 07.02.2011, 21:34
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Код AS1/AS2:
function createLoaderClip(createTo, src) {
	var d = createTo.getNextHighestDepth();
	var newClip = createTo.createEmptyMovieClip("loaderClip_"+d, d);
	var mcl = new MovieClipLoader();
	var loadListener = {};
	loadListener.onLoadInit = function(target_mc) {
		trace("loaded! "+target_mc._width+"x"+target_mc._height);
	};
	mcl.addListener(loadListener);
	mcl.loadClip(src,newClip);
	return newClip;
}
for (var k = 0; k<10; k++) {
	var newLoaderClip = createLoaderClip(_root, "http://www.flasher.ru/forum/images/russian/flasher_logo.gif");
	newLoaderClip._y = k*80;
}
Держите простенький примерчик
__________________
hauts.ru

Старый 10.02.2011, 13:08
Prometei1599 вне форума Посмотреть профиль Отправить личное сообщение для Prometei1599 Найти все сообщения от Prometei1599
  № 3  
Ответить с цитированием
Prometei1599

Регистрация: Jun 2010
Сообщений: 65
Снова здравствуйте!
Столкнулся с небольшой трудностью: mcl.loadClip(src,newClip); возвращает true всегда, даже при отсутствии изображения. Потом, правда, в консоли появляется сообщение о ошибке загрузки.
Может использовать mcl.onLoadError в качестве обработчика события?
Спасибо!

Старый 10.02.2011, 13:27
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 4  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Да, нужно использовать onLoadError у слушателя mcl.

Код AS1/AS2:
function createLoaderClip(createTo, src) {
	var d = createTo.getNextHighestDepth();
	var newClip = createTo.createEmptyMovieClip("loaderClip_"+d, d);
	var mcl = new MovieClipLoader();
	var loadListener = {};
	loadListener.onLoadInit = function(target_mc:MovieClip) {
		trace("loaded! "+target_mc._width+"x"+target_mc._height);
	};
	loadListener.onLoadError = function(target_mc:MovieClip, errorCode:String, httpStatus:Number) {
            trace(">> loadListener.onLoadError()");
            trace(">> ==========================");
            trace(">> errorCode: " + errorCode);
            trace(">> httpStatus: " + httpStatus);
	};
	mcl.addListener(loadListener);
	mcl.loadClip(src,newClip);
	return newClip;
}
for (var k = 0; k<10; k++) {
	var newLoaderClip = createLoaderClip(_root, "http://www.flasher.ru/forum/images/russian/flasher_logo.gif");
	newLoaderClip._y = k*80;
}
__________________
hauts.ru


Последний раз редактировалось Hauts; 10.02.2011 в 13:32.
Старый 15.02.2011, 16:29
Prometei1599 вне форума Посмотреть профиль Отправить личное сообщение для Prometei1599 Найти все сообщения от Prometei1599
  № 5  
Ответить с цитированием
Prometei1599

Регистрация: Jun 2010
Сообщений: 65
По умолчанию Создание превью галереи

В продолжении темы добавлю:
Код AS1/AS2:
var dx:Number = 120;
x_prelCoordinate = 4.5;
x_prewCoordinate = 4.5;
var mtrx = new Matrix();
mtrx.scale(1.0, 1.0);
var prevInstName:String = "";
var mcl:MovieClipLoader = new MovieClipLoader();
 
for(var i:Number = 1; i<=5; i++){
	var d1 = _root.getNextHighestDepth();
	prelInstName = "preloadClip_"+d1;
	var newClip = _root.createEmptyMovieClip(prelInstName, d1);
	mcl.loadClip("images/mno"+i+".jpg", newClip);
	newClip._x = x_prelCoordinate;
	x_prelCoordinate = newClip._x + dx;
	newClip._y = 5;
 
	var bmd = new BitmapData(100, 60, true, 0x00000000);
	bmd.draw(newClip,mtrx,null,"normal",null,true);
	var d2 = roll.getNextHighestDepth();
	prewInstName = "prewievClip_"+d2;
	roll.createEmptyMovieClip(prewInstName, d2);
	roll[prewInstName].attachBitmap(bmd, d2, "auto", true);
	mcl.loadClip("images/mno"+i+".jpg", roll[prewInstName]);
	roll[prewInstName]._x = x_prewCoordinate;
	x_prewCoordinate = roll[prewInstName]._x + dx;
	roll[prewInstName]._y = 5;
}
В итоге получается, что изображения разных размеров как в превью, так и без превью отображаются одинаково.
Помогите пожалуйста найти ошибку в коде!
Заранее спасибо!

Старый 15.02.2011, 17:33
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 6  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Что вы хотите сделать? Я вот что-то не могу сообразить по вашему коду.
__________________
hauts.ru

Старый 15.02.2011, 18:25
Prometei1599 вне форума Посмотреть профиль Отправить личное сообщение для Prometei1599 Найти все сообщения от Prometei1599
  № 7  
Ответить с цитированием
Prometei1599

Регистрация: Jun 2010
Сообщений: 65
Цель: в гелерее сделать "превью", состоящее из изображений одного размера(допустим 100 на 60), в то время как оригиналы изображений разного размера.
В этом коде я хотел сравнить оригиналы загружаемых изображений(наверху) и увидеть результат создания "превью"(внизу). Но в результате как наверху оригинал, так и внизу.

Старый 15.02.2011, 18:32
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 8  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Понятно.

Для начала вам необходимо загрузить изображения. После их полной загрузки отрисовать их в битмапдаты — в одну для превьюшки, вторую для полноразмерной картинки. И уже после этого показывать их. Для каждого изображения вам потребуется свой MovieClipLoader, чтобы ловить события загрузки.

Код AS1/AS2:
	var newClip = _root.createEmptyMovieClip(prelInstName, d1);
	mcl.loadClip("images/mno"+i+".jpg", newClip);
	newClip._x = x_prelCoordinate;
	x_prelCoordinate = newClip._x + dx;
	newClip._y = 5;
 
	var bmd = new BitmapData(100, 60, true, 0x00000000);
	bmd.draw(newClip,mtrx,null,"normal",null,true);
Вот тут принципиальная ошибка. newClip на момент, когда вы вызываете bmd.draw(newClip,mtrx,null,"normal",null,true) является пустым, картинка в него еще не загрузилась.

И еще добавлю: Не стоит "нагромождать" код. Пишите функции под конкретные нужды. Сейчас у вас идет куча разнотипных действий и несколько схожих переменных (prelInstName, prewInstName, prevInstName) — это сложно понять и сложно в этом разобраться.
__________________
hauts.ru


Последний раз редактировалось Hauts; 15.02.2011 в 20:35.
Старый 15.02.2011, 19:35
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 9  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Hauts, а зачем столко MovieClipLoader'ов? Вполне достаточно одного, ровно как и обработчика тоже. В обработчике onLoadInit всегда есть ссылка на контейнер, куда загружали изображение. В цикле только создание контейнера и loadClip и всё, то что действительно уникально.
__________________
Идите первым!


Последний раз редактировалось mooncar; 15.02.2011 в 19:38.
Старый 15.02.2011, 20:15
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 10  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Опс, согласен, я ошибся. Про это как-то не подумал.
__________________
hauts.ru

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

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

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


 


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


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