Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Не могу разобраться с фильтрами (http://www.flasher.ru/forum/showthread.php?t=133326)

kilotsun 02.12.2009 15:04

Не могу разобраться с фильтрами
 
Есть такой код
я его немного сжал и укоротил, чтоб не грузить тему
ссылка на полный - Photo.as
ссылка на работающий проект - проект
Код:

        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


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

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