PDA

Просмотр полной версии : Не могу разобраться с фильтрами


kilotsun
02.12.2009, 15:04
Есть такой код
я его немного сжал и укоротил, чтоб не грузить тему
ссылка на полный - Photo.as (http://www.sunerzha.com/photogallery/Photo.as)
ссылка на работающий проект - проект ("http://www.sunerzha.com/photogallery"/)
public class Photo extends Sprite
{
public var small:Sprite;
private var dropShadowFilter:DropShadowFilter;
private var colorFilter:ColorMatrixFilter;
private var unColorFilter:ColorMatrixFilter;
private var colorAdjustFilter:ColorAdjust;
private var unColorAdjustFilter:ColorAdjust;

public function Photo( smallUrl:String, index:int )
{
initEffects();
...
}

private function initEffects()
{
unColorAdjustFilter = new ColorAdjust();
unColorAdjustFilter.saturation = 0;
unColorFilter = unColorAdjustFilter.filter;

colorAdjustFilter = new ColorAdjust();
colorAdjustFilter.saturation = 1;
colorFilter = colorAdjustFilter.filter;

dropShadowFilter = new DropShadowFilter( 3, 35, 0x000000, 0.3, 3, 3, 1, 5);
}

private function onSmallLoad( event:Event):void
{
...
unColorize();
...
}

private function onSmallMouseOver( event:Event):void
{ colorize(); }

private function onSmallMouseOut( event:Event):void
{ unColorize(); }

public function showShadow()
{ small.filters = [dropShadowFilter]; }

public function hideShadow()
{ small.filters = undefined; }

public function colorize()
{ small.filters = [colorFilter]; }

public function unColorize()
{ small.filters = [unColorFilter]; }
}


Проблема вот в чем при частом запуске onSmallMouseOver, код из colorize не срабатывает, причем сама colorize запускается, т.е. похоже что функция small.filters set - не срабатывает по какой-то причине, её то как раз я и не могу понять.
Если colorize будет выглядеть так:


public function colorize()
{ small.filters = undefined; }


меня бы это устроило, но тогда при частом onSmallMouseOver-onSmallMouseOut происходит мигание этих же картинок в позиции [0, 0] но при этом первая проблема исчезает, что сейчас и происходит в выставленном проекте.

Заранее благодарен откликнувшимся

Bobrov
02.12.2009, 16:27
если точно как надо срабатывают MOUSE_OVER и MOUSE_OUT (а я бы ещё раз проверил), для начала бы каждый раз создавал новый фильтр

public function colorize() { small.filters = [new Filter()] }

kilotsun
02.12.2009, 16:48
Если каждый раз создавать фильтр, то проявление ошибки возрастает в пару раз и это меня тоже удивляет :(

silin
02.12.2009, 17:09
если это мышиные события, то возможна такая ситуация: colorize запускается, но перерисовка происходит при смене кадра
попробуй event.updateAfterEvent();

kilotsun
02.12.2009, 17:21
silin, у Вас отличная библиотека
в этой галерее она меня просто спасла :)
особенно понравился риппл

Все заработало с updateAfterEvent()

Огромное спасибо :D