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

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

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

Регистрация: Jun 2008
Сообщений: 283
Thumbs up Тень для полупрозрачного объекта

Приветствую всех.

Столкнулся с такой проблемой:
Программно создается объект mc (Sprite), у которого имеется полупрозрачный фон. Для всего объекта применяю фильтр тени
Код AS3:
mc.filters = [new DropShadowFilter]
В результате, из-за полу прозрачности объектов входящих в состав mc, получается не тот результат.
В добавок, объект имеет сложную форму и решить проблему путём создания прямоугольника с размерами исходного mc и уже на него наложить тень не получиться.
Пытаюсь найти решение путём создания дубликата исходного mc:

PHP код:
public    function duplication_sprite(sprite:Sprite): Sprite {
var 
bmd        :BitmapData        =        new BitmapData(sprite.width,sprite.height,true,0x000000)    ;
bmd.draw(sprite)    ;
var    
bm        :Bitmap            =        new Bitmap(bmd);
bm.smoothing                    =        true    ;
var 
sprite        :Sprite            =         new Sprite();

Однако, в результате мы получаем точную копию (с прозрачностью, от которой надо избавиться), и в добавок тратим на это много ресурсов +(. А хочется, что бы в результате получился объект с точной формой исходного mc и залитый сплошной непрозрачной заливкой, что бы могли смело применять к нему фильтры.

Подскажите пожалуйста решение данного вопроса. Если он имеется конечно же.
Спасибо.


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

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Попробуйте многократно отрисовывать полупрозрачный клип, таким образом степень прозрачности будет уменьшаться. В цикле от 0 до 20 прогоните bmd.draw(sprite).

Кстати
Код AS3:
mc.filters = [delete DropShadowFilter]
шокирует, как и оформление (!) php-кодом.
__________________
hauts.ru


Последний раз редактировалось Hauts; 21.05.2012 в 20:06.
Старый 21.05.2012, 20:09
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 3  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Думаю проще создать Bitmap отрисовать в него спрайт, применив какой-нибудь blendMode.

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

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Можно еще так:
Код AS3:
bmd.draw(sprite, new Matrix(), new ColorTransform(0, 0, 0, 0, 0, -255, -255, 255));
— получите ваш клип полностью черного цвета.
__________________
hauts.ru

Старый 21.05.2012, 22:25
Evgan вне форума Посмотреть профиль Отправить личное сообщение для Evgan Найти все сообщения от Evgan
  № 5  
Ответить с цитированием
Evgan

Регистрация: Jun 2008
Сообщений: 283
Цитата:
Сообщение от Hauts Посмотреть сообщение
Кстати
Код AS3:
mc.filters = [delete DropShadowFilter]
шокирует, как и оформление (!) php-кодом.
Извиняюсь, обшибся в торопях

Добавлено через 3 минуты
Цитата:
Сообщение от Hauts Посмотреть сообщение
Можно еще так:
Код AS3:
bmd.draw(sprite, new Matrix(), new ColorTransform(0, 0, 0, 0, 0, -255, -255, 255));
— получите ваш клип полностью черного цвета.
Спасибо большое, нужная информация. Теперь по средством копирования клипа через Bitmap всё работает как надо. Но всё же он "тяжеловат"+(

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

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Цитата:
Сообщение от Hauts Посмотреть сообщение
Код AS3:
bmd.draw(sprite, new Matrix(), new ColorTransform(0, 0, 0, 0, 0, -255, -255, 255));
— получите ваш клип полностью черного цвета.
С красноватым оттенком думаю должен получиться... Если красный изначально был. Хотя может и ошибаюсь.

Старый 22.05.2012, 11:01
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 7  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
как вариант colorTransform копии спрайта, без отрисовки в битмап
Код AS3:
public function duplication_sprite(sprite:Sprite):Sprite
{
	var spriteClass:Class = Object(sprite).constructor;
	var res:Sprite = new spriteClass() as Sprite;
	res.transform.colorTransform = new ColorTransform(0, 0, 0, 1, 0, 0, 0, 255);
	return res;
}
Добавлено через 4 минуты
упс, сори: фильтры не работают с таким (под colorTransform ) спрайтом

Добавлено через 13 минут
но выкрутится можно: обернуть трансформированный спрайт еще одним, например
Код AS3:
public function duplication_sprite(sprite:Sprite):Sprite
{
	var spriteClass:Class = Object(sprite).constructor;
	var res:Sprite = new spriteClass() as Sprite;
	res.transform.colorTransform = new ColorTransform(0, 0, 0, 1, 0, 0, 0, 255);
	var res1:Sprite = new Sprite();
	res1.addChild(res);
	return res1;
}

Старый 22.05.2012, 11:38
Evgan вне форума Посмотреть профиль Отправить личное сообщение для Evgan Найти все сообщения от Evgan
  № 8  
Ответить с цитированием
Evgan

Регистрация: Jun 2008
Сообщений: 283
Цитата:
Сообщение от silin Посмотреть сообщение

Добавлено через 13 минут
но выкрутится можно: обернуть трансформированный спрайт еще одним, например
Код AS3:
public function duplication_sprite(sprite:Sprite):Sprite
{
	var spriteClass:Class = Object(sprite).constructor;
	var res:Sprite = new spriteClass() as Sprite;
	res.transform.colorTransform = new ColorTransform(0, 0, 0, 1, 0, 0, 0, 255);
	var res1:Sprite = new Sprite();
	res1.addChild(res);
	return res1;
}
Хм, что то у меня не работает это код. К примеру, по средством:

Код AS3:
public	function renderSpriteFill(_w:int = 15,_h:int=15,_r:int=0,_color:Number=0x00000): Sprite {
	var _temp	:Sprite	=	new	Sprite();
	_temp.graphics.clear();	
	_temp.graphics.beginFill(_color, 1);
	_temp.graphics.drawRoundRect(0, 0, _w, _h, _r);	
	return	_temp;
}
создаю простой спрайт, и дублирую его вашим способом:
Код AS3:
var _temp	:Sprite = renderSpriteFill(30,30);
trace(_temp.width+ ' <> '+_temp.height); // выдаёт 30 <> 30
var	dubl	:Sprite = duplication_sprite(_temp)	
trace(dubl.width+ ' <> '+dubl.height); // выдаёт 0 <> 0
Может я что то не учитываю?..


Последний раз редактировалось Evgan; 22.05.2012 в 11:41.
Старый 22.05.2012, 11:46
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
дада верно, это будет работать только для 'готовых' (библиотечных, например) спрайтов
все, что нарисовано программно после создания спрайта, естественно в такой дубликат не попадет

Старый 22.05.2012, 12:15
Evgan вне форума Посмотреть профиль Отправить личное сообщение для Evgan Найти все сообщения от Evgan
  № 10  
Ответить с цитированием
Evgan

Регистрация: Jun 2008
Сообщений: 283
Цитата:
Сообщение от silin Посмотреть сообщение
дада верно, это будет работать только для 'готовых' (библиотечных, например) спрайтов
все, что нарисовано программно после создания спрайта, естественно в такой дубликат не попадет
Понял. Спасибо за информацию.

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

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

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


 


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


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