flash on 2012-9-12

by bradsedito
♥0 | Line 106 | Modified 2012-09-13 17:21:23 | 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/i8rN
 */










package
{
    import flash.display.Graphics;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.Point;


    public class LineShape extends Sprite
    {
        private const   _RASIAN      :Number  =  Math.PI / 180
        private const   _G           :Number  =  0.4
        private var     _circles     :Array
        private var     _isPlaying   :Boolean
        private var     _vector      :Vector.<Joint>


        public function LineShape() 
        {
            _vector = new Vector.<Joint>();
            start();
        } 
               

        public function start():void
        {    
            if(_isPlaying)return;
            _isPlaying = true;

            for ( var i:int = 0; i < 50; i++) 
            {
                _vector.push(new Joint(0, i * 50));
                _vector[i].vy = 1;
            }
            
            addEventListener(Event.ENTER_FRAME, _enterFrameHandler);
        }


        public function stop():void
        {
            if (!_isPlaying)   // AKA:[    if (!_isPlaying) return;    ]
            {
                return;    
            }
            _isPlaying = false;

            removeEventListener(Event.ENTER_FRAME, _enterFrameHandler);

            while (_vector.length) 
            {
                _vector.shift();
            }
            
            graphics.clear();
        }

        
        private function _enterFrameHandler(e:Event):void 
        {
            var joint:Joint;
            var i:int;
            var len:int;
 
            len = _vector.length;

            var p:Point = new Point();

            p.x = mouseX;
            p.y = mouseY;

            for ( i = 0; i < len; i++)

            {

                joint = _vector[i];
                joint.x += joint.vx;
                joint.y += joint.vy;
                joint.vx *= 0.99;
                joint.vy *= 0.99;
                joint.vy += _G;    

                var dx:Number = joint.x - p.x;
                var dy:Number = joint.y - p.y;
                var d:Number = Math.sqrt( dx*dx + dy*dy );
                var r:Number = Math.atan2(dy, dx) * 180 / Math.PI;

                if (d > 100) 
                {
                    d = 100;
                    joint.x = p.x +  Math.cos(r * _RASIAN) * d;
                    joint.y = p.y + Math.sin(r * _RASIAN) * d;
                }

                p.x = joint.x;
                p.y = joint.y;
            }

            var g:Graphics = graphics;
            g.clear();
            g.lineStyle(1,0xe8342f);
            g.moveTo(mouseX, mouseY);

            for ( i = 0; i < _vector.length; i++) 
            {
                if (i < _vector.length-2) 
                {
                    g.curveTo(
                                 (  _vector[i].x  ), 
                                 (  _vector[i].y  ), 
                                 ( (_vector[i].x  ) + (_vector[i+1].x) * 0.5),
                                 ( (_vector[i].y  ) + (_vector[i+1].y) * 0.5)        
                    )
                }
            }
        }

    }
}



internal class Joint
{
    public function Joint(  x:Number=0, y:Number=0, z:Number=0  ) 
  //public function Joint(  x:Number=0, y:Number=0  ) 
    {
        this.x = x;
        this.y = y;
        this.z = z;
        vx  =  vy  =  0;
      //vx  =  vy  =  vz;
    }

    

    public var x:Number;

    public var y:Number;

    public var vx:Number;

    public var vy:Number;

    

}