Spline vFX

by bradsedito forked from スプライン曲線で追跡中 (diff: 65)
♥0 | Line 85 | Modified 2011-12-20 00:05:25 | MIT License
play

ActionScript3 source code

/**
 * Copyright bradsedito ( http://wonderfl.net/user/bradsedito )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/K7Em
 */






package 
{
    import flash.geom.Point;
    import flash.geom.ColorTransform;
    import flash.geom.Matrix;
    import flash.events.Event;
    import flash.display.Shape;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.display.Sprite;
    import flash.filters.BlurFilter;
    import frocessing.color.ColorHSV;
    import flash.utils.Timer;
    import flash.events.TimerEvent; 

    public class SplineVFX extends Sprite 
    {
        
        public function SplineVFX() 
        {
            var _bmpd:BitmapData=new BitmapData(stage.stageWidth,stage.stageHeight,true,0x0)
            var points:Vector.<Point> = new Vector.<Point>
            var _bf:BlurFilter = new BlurFilter( 6,6,3 );
            var tightness:int = 60
            var n:int = 1
            var animatedObject:Sprite = new Sprite();
            var shape:Shape = new Shape
            var r:Number = 235
            //m:uint=Math, 
            var h:ColorHSV = new ColorHSV();
            var timerHSV:Timer = new Timer(1,0);
            
            timerHSV.addEventListener(TimerEvent.TIMER,timerHandler)
            function timerHandler():Function  
            {
                return function() 
                {
                    h.h = i/r * 135 + n * -2000;
                    
                    //h.value32
                }                
                timerHSV.start();
            }            
                   
            addChild( animatedObject )            
            opaqueBackground = 0x000000;
            stage.frameRate = 90;
            addChild(new Bitmap( _bmpd ))
            shape.graphics.beginFill(0x999999)
            shape.graphics.drawCircle( 0,0,10 )                

            for (var i:int=0; i<4; i++) 
            {
                points.push(new Point(stage.stageWidth*Math.random(), stage.stageHeight*Math.random()))                
                h.h = 135 + n * -2000;
                var colorObjectHSV:uint;
                colorObjectHSV = h.value32 ;            }                       
            addEventListener(Event.ENTER_FRAME,function(e:Event):void 
            {
                var colorTransform:ColorTransform = new ColorTransform
                colorTransform.color = 0xffffff*Math.random()
                colorTransform.alphaMultiplier = 0.980
                _bmpd.colorTransform( _bmpd.rect, colorTransform )
                for (var i:int=0; i<4; i++) 
                {
                    var matrix:Matrix = new Matrix
                    matrix.translate(points[i].x, points[i].y)
                    var color:ColorTransform = new ColorTransform
                    color.color = 0xff
                    _bmpd.draw( shape,matrix,color )
                }
                var px:Number = spline(points[0].x, points[1].x, points[2].x, points[3].x, n/tightness);
                var py:Number = spline(points[0].y, points[1].y, points[2].y, points[3].y, n/tightness);
                var matrix2:Matrix = new Matrix
                matrix2.translate(px, py)
                _bmpd.draw( shape,matrix2 )                
                n++
                if (n>tightness) {
                    points.shift()
                    points.push(new Point(stage.stageWidth*Math.random(), stage.stageHeight*Math.random()))
                    n=1
                }
            })
            function spline(p0:Number, p1:Number, p2:Number, p3:Number, t:Number):Number {
                var v0:Number = (p2 - p0) * 0.5;
                var v1:Number = (p3 - p1) * 0.5;
                var t2:Number = t * t;
                var t3:Number = t2 * t;
                return (2 * p1 - 2 * p2 + v0 + v1) * t3 + ( -3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;
            }      
        }
    }
}

            //graphics.beginFill(0x008833)                
            //graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight)