|
|
|||||
Изменение свойств фильтра(ов)
Есть некий DisplayObject, на который действует неопределенное количество фильтров.
В какой-то момент необходимо один или несколько из них "обновить", т.к. они поменяли ряд своих значений. Как, если предположительно неизвестно что и как поменялось? Пример кода: import flash.display.Sprite; import flash.filters.DropShadowFilter; var mc:Sprite=new Sprite(); mc.graphics.beginFill(0xff0000); mc.graphics.drawCircle(100,100,100); mc.graphics.endFill(); addChild(mc); var filter:DropShadowFilter = new DropShadowFilter(); mc.filters=[filter]; filter.distance=50; //вот тут необходимо обновить фильтр/отображение объекта, с учетом того, что количество примененных фильтров и ссылки на них не известны
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Просто заново назначить массив фильтров... Или что именно неизвестно?
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Mar 2011
Сообщений: 243
|
Я думаю, как то так
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Массив-то хранит ссылки на экземпляры фильтров, и когда фильтры меняются, "в массиве" они "тоже меняются". Но дело в том, что когда Вы отдавали массив свойству filters, фильтры применяются один раз как набор эффектов с установками (значениями). Автоматического обновления не происходит, так же как здесь:
__________________
Reality.getBounds(this); |
|
|||||
Wolsh, да, то что необходимо назначить, - не известно.
Массив - объект ссылочного типа, думал что по сеттеру происходит сравнение массивов. Но нижеприведенный код на результате никак не отразился: Очень бы не хотелось воспользоваться чем-то похожим на вариант Deimos747
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! Последний раз редактировалось TanaTiX; 24.03.2012 в 17:58. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А как он должен был отразиться? Если ты скопировал и назначил обратно то же, что и было?
var filtersArr:Array = [_shadow, _blur]; mc.filters = filtersArr; trace(mc.filters == filtersArr); // false ! Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Ну, а в чем проблема то? Нужно обновить фильтры в любой момент времени?
Конкат тут так на всякий случай. Если без него работает, то лучше без него. И чем Вас ответ Wolsh-а не устроил?
__________________
http://www.chessmax.ru Последний раз редактировалось Inet_PC; 24.03.2012 в 19:35. |
|
|||||
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
Почему бы не переопределить сеттер для фильтров и в нем все это реализовывать?
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Silicium, отличная мысль!
FilteredSprite.as : package { import flash.display.Sprite; public class FilteredSprite extends Sprite { private var _filterArray:Array = []; public function FilteredSprite() { } override public function set filters(value:Array):void { _filterArray = value; super.filters = value; } public function updateFilters():void { super.filters = _filterArray; } } }
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 08:40. |
|
« Предыдущая тема | Следующая тема » |
|
|