Color Tweening in Flash AS3

Generally if we change color change of a movieclip from one color to another there occurs a jumping effect between two colors. To avoid this effect we can use color tweening to switch between different colors. This is useful for adding tweening effect to the color change and to set alpha property of a component dynamically while changing colors as it adds an extra smoothing effect..

Example

1. Create a .fla file.

2. Import the following actionscript file to it.

3. Execute the .fla file

4. Now on doing mouse over on the swf component you can see the color change of the swf smoothly with a tweening effect.

package 
{
    import flash.display.MovieClip;        
    import flash.events.MouseEvent;    
    import flash.geom.ColorTransform;
    
    import fl.transitions.Tween;
    import fl.transitions.easing.Strong;
    import fl.transitions.TweenEvent;
    
    
    public class ColorTweening extends MovieClip    
    {
        private var startColor:ColorTransform; // default color, no tint
        private var endColor:ColorTransform;    // end change color                
        private var tweenColor:Tween;    // tweener object sets the tweening of the movieclip
        private var endTransparency:Number = 1; // sets the transparency of the color
        private var tweenMC:MovieClip;        
        private var movieClipHt:Number = 250;
        private var movieClipWt:Number = 400;
        
        private const endColorOver:String = "0x313031";    // end color while doing mouse over
        private const endColorOut:String = "0xCDFFFF";    // end color while doing mouse out
        private const tweenTime:Number = 500;    // tween duration
        private const initColorPos:Number = 0.1;    // this is the initial position of color tween
                    
        
        // constructure
        public function ColorTweening():void
        {                        
            // create movieclip dynamically
            tweenMC = new MovieClip();
            tweenMC.graphics.beginFill(0xCDFFFF);
            tweenMC.graphics.drawRect(0, 0, movieClipWt, movieClipHt);
            tweenMC.graphics.endFill();            
            tweenMC.addEventListener(MouseEvent.MOUSE_OVER, changeColor);
            tweenMC.addEventListener(MouseEvent.MOUSE_OUT, changeColor);    
            this.addChild(tweenMC);
        }
        
        // function executes when do mouse over or mouse out on the movieclip
        private function changeColor(evt:MouseEvent)
        {    
            // changes color on mouser over of the movieclip
            if (evt.type == MouseEvent.MOUSE_OVER)
            {    
                startColor = new ColorTransform(); // default color, no tint
                endColor = new ColorTransform();
                endColor.color = uint(endColorOver); // end color of 
                tweenColor = new Tween(evt.currentTarget, "", Strong.easeOut, 0, 0, initColorPos);            
                evt.currentTarget.transform.colorTransform = interpolateColor(startColor, endColor, initColorPos);
                
                tweenColor = new Tween(evt.currentTarget, "", Strong.easeOut, 0, endTransparency, tweenTime);            
                tweenColor.addEventListener(TweenEvent.MOTION_CHANGE, tweenTransformOver);
            }
            
            //changes color on mouse out of the movieclip
            else if (evt.type == MouseEvent.MOUSE_OUT)
            {
                startColor = new ColorTransform(); // default color, no tint
                endColor = new ColorTransform();
                endColor.color = uint(endColorOut); // end color
                evt.currentTarget.transform.colorTransform = interpolateColor(startColor, endColor, 1);                
            }        
        }
        
        // does the tweening
        function tweenTransformOver(event:TweenEvent):void
        {                                    
            var result:ColorTransform = new ColorTransform();
            tweenMC.transform.colorTransform = interpolateColor(startColor, endColor, tweenColor.position);
                
        }
        
        // does the interpolation of color
        function interpolateColor(start:ColorTransform, end:ColorTransform, currPos:Number):ColorTransform 
        {                    
            var currentColor:ColorTransform = new ColorTransform();
            currentColor.redMultiplier = start.redMultiplier + (end.redMultiplier - start.redMultiplier) * currPos;
            currentColor.greenMultiplier = start.greenMultiplier + (end.greenMultiplier - start.greenMultiplier) * currPos;
            currentColor.blueMultiplier = start.blueMultiplier + (end.blueMultiplier - start.blueMultiplier) * currPos;
            currentColor.alphaMultiplier = start.alphaMultiplier + (end.alphaMultiplier - start.alphaMultiplier) * currPos;
            currentColor.redOffset = start.redOffset + (end.redOffset - start.redOffset) * currPos;
            currentColor.greenOffset = start.greenOffset + (end.greenOffset - start.greenOffset) * currPos;
            currentColor.blueOffset = start.blueOffset + (end.blueOffset - start.blueOffset) * currPos;
            currentColor.alphaOffset = start.alphaOffset + (end.alphaOffset - start.alphaOffset) * currPos;
            return currentColor;
        }

    }
}
150 150 Burnignorance | Where Minds Meet And Sparks Fly!