Векторная форма появляется неровной после GlowFilter и некоторых других проблем - PullRequest
0 голосов
/ 03 декабря 2009

Я пытаюсь создать некоторые мувиклипы с эффектом свечения, когда вы переворачиваете, и эффект свечения исчезает при RollOut. Но когда rollOut закончен, мой фоновый мувиклип, к которому я применяю фильтр (простой векторный круг 20 x 20), внезапно выглядит неровным, когда перед rollOver / rollOut он выглядел гладким, как и должно быть. Что здесь может происходить?

Я довольно новичок в AS3, поэтому пример еще не работает должным образом. Например:
* когда вы переворачиваете элемент в первый раз, он сразу показывает конечную фазу свечения вместо анимации. Я думал, что обойду это с помощью Tween.rewind () в конструкторе, но это не сработало. * также я не уверен, находится ли addEventListener для TweenEvent.MOTION_CHANGE в правильном месте. Я попытался поместить его в конструктор, но это привело к непрерывному получению события _onMotionChange.

Некоторая помощь по этим вопросам высоко ценится. Но наиболее важной частью является зазубренный круг после того, как светящийся фильтр исчез.

Это то, что у меня есть (сокращенный пример):

package
{
    import flash.events.*;
    import flash.display.*;
    import flash.text.*;
    import flash.utils.*;
    import flash.filters.GlowFilter;
    import fl.transitions.Tween;
    import fl.transitions.TweenEvent;
    import fl.transitions.easing.*;

    public class ScoreListItem extends MovieClip
    {

        private var _glowFilter:GlowFilter;
        private var _tweenGlowFilterBlurX:Tween;
        private var _tweenGlowFilterBlurY:Tween;

        public function ScoreListItem():void
        {

            _glowFilter = new GlowFilter( 0xffffff, 1, 3, 3, 2, 1, false, false );
            _tweenGlowFilterBlurX = new Tween( _glowFilter, 'blurX', Strong.easeIn, 1, 5, .8, true );
            _tweenGlowFilterBlurY = new Tween( _glowFilter, 'blurY', Strong.easeIn, 1, 5, .8, true );

            _tweenGlowFilterBlurX.rewind();
            _tweenGlowFilterBlurY.rewind();

            addEventListener( MouseEvent.ROLL_OVER, _onRollOver );
            addEventListener( MouseEvent.ROLL_OUT, _onRollOut );
        }

        private function _onRollOver( event:Event )
        {
            trace( 'rollOver' );
            _tweenGlowFilterBlurY.addEventListener( TweenEvent.MOTION_CHANGE, _onMotionChange );
            _tweenGlowFilterBlurX.continueTo( 5, 1 );
            _tweenGlowFilterBlurY.continueTo( 5, 1 );
        }

        private function _onRollOut( event:Event )
        {
            trace( 'rollOut' );
            _tweenGlowFilterBlurY.addEventListener( TweenEvent.MOTION_CHANGE, _onMotionChange );
            _tweenGlowFilterBlurX.continueTo( 1, 1 );
            _tweenGlowFilterBlurY.continueTo( 1, 1 );
        }

        private function _onMotionChange( event:Event )
        {
            trace( 'motionChange' );
            this.backgroundCircle.filters = [ _glowFilter ];
        }

    }
}

1 Ответ

0 голосов
/ 05 декабря 2009

Мне удалось решить мою проблему, просто удалив фильтр, когда он был завершен в _onRollOut, добавив обработчик событий для TweenEvent.MOTION_FINISH. Таким образом, зубчатые края формы векторного круга исчезли, и все снова стало нормальным.

private function _onRollOut( event:MouseEvent )
{
    _tweenGlowFilterBlurY.addEventListener( TweenEvent.MOTION_FINISH, _onRollOutFinish );
   /* etc... */
}

private function _onRollOutFinish( event:TweenEvent )
{
    this.label.filters = [];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...