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

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

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
По умолчанию Применение эффектов на картинках, которые загружаются динамически через XML

Привет!Вопрос следующий:
Есть у меня 10 картинок, которые я хочу загрузить через xml...делаю следующим образом:
Код AS3:
var imageLoader:Loader;
var xml:XML; 
var xmlList:XMLList;		
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.load(new URLRequest("data/images.xml"));
 
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded); 
function xmlLoaded(event:Event):void
{
	xml = XML(event.target.data);
	xmlList = xml.children(); 
 
	for(var i:uint = 0; i< xmlList.length(); i++)
	{
		imageLoader = new Loader();
		imageLoader.load(new URLRequest(xmlList[i].attribute("thumb"))); 
		imageLoader.x = 25;
		imageLoader.y = i * 150 + 25; 
		addChild(imageLoader);
	}
}
Эта часть работает отлично!НО!Что если мне надо потом с этими картинками что-то делать, допустим менять их цвет или яркость(другими словами работать с BitmapData), смогу ли я это сделать и если да, то каким образом я должен конвертировать объект imageLoader в что-то что позволило бы мне потом выйти на вышеуказанные эффекты?(подозреваю, что конвертить надо в Bitmap, но как?)

Добавлено через 2 минуты
и ещё одно...как вы считаете, нужно ли мне создавать массив в который я буду сохранять объекты imageLoader, для более удобного обращения к ним позже или есть другой способ потом к ним бращаться без создания массива(с учётом, что их нет на сцене)?

Старый 13.06.2010, 02:32
kutuzov вне форума Посмотреть профиль Отправить личное сообщение для kutuzov Найти все сообщения от kutuzov
  № 2  
Ответить с цитированием
kutuzov
 
Аватар для kutuzov

Регистрация: Jul 2005
Сообщений: 135
битмапу можно взять из loader.content
чтобы её можно было редактировать, нужно при load указать LoaderContext c чекполиси true

если вам изменять яркость нужно только для пользователя (типа навел мышь / убрал), а не для других целей (типа изменил яркость залил на сервер), то можно применять transorm и на объект лоадер, тогда чекполиси ни к чему
__________________
хоумпага

Старый 13.06.2010, 12:48
Universe вне форума Посмотреть профиль Отправить личное сообщение для Universe Найти все сообщения от Universe
  № 3  
Ответить с цитированием
Universe
 
Аватар для Universe

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
а если надо допустим добавить параметр smoothing, чтобы сгладить картинку?
Кстати, loader.content даёт null!

Старый 13.06.2010, 12:59
kutuzov вне форума Посмотреть профиль Отправить личное сообщение для kutuzov Найти все сообщения от kutuzov
  № 4  
Ответить с цитированием
kutuzov
 
Аватар для kutuzov

Регистрация: Jul 2005
Сообщений: 135
Loader.contentLoaderInfo.content
попробуйте этому контент присвоить смузинг тру
__________________
хоумпага

Старый 13.06.2010, 17:34
Universe вне форума Посмотреть профиль Отправить личное сообщение для Universe Найти все сообщения от Universe
  № 5  
Ответить с цитированием
Universe
 
Аватар для Universe

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
а можно как то поменять центральную точку у объекта Loader? Или надо обязательно в спрайт кидать?

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

Регистрация: Jul 2005
Сообщений: 135
loader.transform.matrix
__________________
хоумпага

Старый 13.06.2010, 17:36
Universe вне форума Посмотреть профиль Отправить личное сообщение для Universe Найти все сообщения от Universe
  № 7  
Ответить с цитированием
Universe
 
Аватар для Universe

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
Цитата:
Loader.contentLoaderInfo.content
попробуйте этому контент присвоить смузинг тру
за совет большое спасибо, всё сработало! Провтык у меня был в том что я до этого обращался к Loader.contentLoaderInfo.content сразу после строки загрузки, забыл, что надо это дела в функции на комплите

Добавлено через 54 секунды
опреативно отвечаете! ценю!))

Добавлено через 3 минуты
А если чуток поподробнее? Чтото не нахожу этого свойства в хелпе. Можно строчку кода, как это записывать?

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

Регистрация: Jul 2005
Сообщений: 135
любой дисплей обжект имеет свойство трансформ, так же как x и y
внутри трансформа есть матрица смещения matrix, её и нужно задавать
Код AS3:
const m:Matrix = loader.transform.matrix;
m.translate(-25, -25);
loader.transform.matrix = m;
если нужно повернуть объект вокруг определенной точки, то делаем так
Код AS3:
const m:Matrix = loader.transform.matrix;
m.translate(-25, -25); // смещаем в точку где надо крутить
m.rotate(-Math.PI / 18); // крутим на минус 10 градусов
m.translate(25, 25); // возвращаем откуда взяли
loader.transform.matrix = m;
25 - это половина ширины/высоты объекта (в данном случае я крутил вокруг центра)
__________________
хоумпага


Последний раз редактировалось kutuzov; 13.06.2010 в 18:18.
Старый 13.06.2010, 19:02
Universe вне форума Посмотреть профиль Отправить личное сообщение для Universe Найти все сообщения от Universe
  № 9  
Ответить с цитированием
Universe
 
Аватар для Universe

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
большое спасибо за пример!
а как в этом же примере можно применить к этой картинке размытие и убирать его при наведении на определённую картинку?
Я делаю вот так:
Код AS3:
var imageLoader:Loader;
var holder_mc:Sprite;
//var image_bmd:BitmapData = new BitmapData(150, 150, false, 0x000000)
var image_bmp:Bitmap;
var images_arr:Array = new Array();
var m:uint;
var bfOn:uint = 5;
var xml:XML;
var xmlList:XMLList;
var xmlLoader:URLLoader = new URLLoader();
var dMap:BitmapData;
var bf:BlurFilter = new BlurFilter(5, 5, bfOn);
 
xmlLoader.load(new URLRequest("data/images.xml"));
 
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
 
function xmlLoaded(event:Event):void
{
	xml = XML(event.target.data);
	xmlList = xml.children();		
 
	for(var i:uint = 0; i< xmlList.length(); i++)
	{
		imageLoader = new Loader(); // Лоадер для картинки
		imageLoader.load(new URLRequest(xmlList[i].attribute("thumb"))); 
		imageLoader.name = xmlList[i].attribute("source");
		imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, showMeContent);
 
	}
}
 
 
 
function rollObj(e:MouseEvent):void
{
	bfOn = 0;
	//e.target.contentLoaderInfo.content.smoothing = true; 
	e.target.scaleX = 1.5;
	e.target.scaleY = 1.5;
	trace(e.target.getChildAt(0).bitmapData);
	trace(e.target.getChildAt(0));
	var bf:BlurFilter = new BlurFilter(-5, -5, -5);
	e.target.getChildAt(0).bitmapData.applyFilter(e.target.getChildAt(0).bitmapData, e.target.getChildAt(0).bitmapData.rect, new Point(0,0), bf);
	trace(bfOn)
}
 
function showMeContent(e:Event):void
{
	dMap = new BitmapData(150, 100, false, 0x000000);
	dMap.draw(e.target.content);
	var newBitmap:Bitmap = new Bitmap(dMap);
	holder_mc = new Sprite();
	//holder_mc.addChild(e.target.content);
	holder_mc.x = 125;
	holder_mc.y  = m * 150 + 25;
 
	newBitmap.x = -newBitmap.width/2;
	newBitmap.y = -newBitmap.height/2;
	//trace(e.target.content.x );
	addChild(holder_mc);
	//newBitmap.smoothing = true;
 
 
	dMap.applyFilter(dMap, dMap.rect, new Point(0,0), bf);
	holder_mc.addChild(newBitmap);
	holder_mc.addEventListener(MouseEvent.ROLL_OVER, rollObj);
	m++;
}
Применить фильтер получается, но не получается его убрать при наведении? Как его можно убрать?

Старый 13.06.2010, 19:18
kutuzov вне форума Посмотреть профиль Отправить личное сообщение для kutuzov Найти все сообщения от kutuzov
  № 10  
Ответить с цитированием
kutuzov
 
Аватар для kutuzov

Регистрация: Jul 2005
Сообщений: 135
делая applyFilter вы изменяете сами пиксели в исходном битмапдате
нужно же накладывать фильтры через obj.filters = [new BlurFilter(...)]
чтобы убрать фильтры obj.filters = []
__________________
хоумпага

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

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

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


 


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


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