flash on 2016-3-4

by mutantleg
♥0 | Line 102 | Modified 2016-03-04 10:00:53 | MIT License
play

ActionScript3 source code

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

package {
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            vecNode = new Vector.<xNode>(0,false);
            var i:int; var num:int; var a:xNode;
            num = 6;
            for(i=0;i<num;i+=1)
            {
              a = new xNode();
               a.cx = 230;
               a.cy = 230+i*8;
               a.cx+=i*3;
             vecNode.push(a);   
            }//nexti
            
            stage.addEventListener(MouseEvent.MOUSE_DOWN, onMdown);
            stage.addEventListener(MouseEvent.MOUSE_UP, onMup);            
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public function onMdown(e:MouseEvent):void    { mbutton = 1;  }
        public function onMup(e:MouseEvent):void   { mbutton = 0;  }
        
        public var mbutton:int = 0;
        
        public var vecNode:Vector.<xNode>;
        
        public function onEnter(e:Event):void
        {
            graphics.clear();
            graphics.lineStyle(2, 0);

            graphics.drawRect(0,0,465,465);
            
            if (mbutton > 0)
            { a = vecNode[vecNode.length-1];
              a.cx = stage.mouseX; a.cy = stage.mouseY;
              a.vx=0;a.vy=0; 
            }
            
            var nx:Number; var ny:Number;
            var i:int; var num:int;  var k:int;
            var a:xNode; var b:xNode;
            num = vecNode.length;
            
         
            a = vecNode[0];
            a.cx = 230; a.cy=100;
            a.vx=0;a.vy=0;
            graphics.drawCircle(a.cx,a.cy,8);

            
            for (k=0;k<10;k+=1)
            {
                for (i=1;i<num;i+=1)
                {
                  a = vecNode[i];
                  b = vecNode[i-1];  
                  doSpring(a,b,16, 10);
                   a.vx*=0.999;
                   a.vy*=0.999;
                   a.vy +=0.2*0.1;
                  a.cx+=a.vx; a.cy+=a.vy;    
                  
                }//nexti
              }//nextk
                
            var t:Number; var ax:Number; var ay:Number;
            i=0;
            for (t=0;t<1;t+=0.05)
            {
                ax = getBez4(vecNode[0].cx, vecNode[1].cx, vecNode[2].cx, vecNode[3].cx, vecNode[4].cx, vecNode[5].cx, t); 
                ay = getBez4(vecNode[0].cy, vecNode[1].cy, vecNode[2].cy, vecNode[3].cy, vecNode[4].cy, vecNode[5].cy, t); 
                if (i ==0)   { i=1; graphics.moveTo(ax,ay);}
                graphics.lineTo(ax,ay);
                
            }//nextt     
            
            /*
            for (i=1;i<num;i+=1)
            {
              a = vecNode[i];
              b = vecNode[i-1];  
              graphics.drawCircle(a.cx,a.cy, 4);  
              graphics.moveTo(a.cx,a.cy);
              graphics.lineTo(b.cx,b.cy);              
            }//nexti
            */
            
            
            
            
            
        }//onenter
      
       
        
        
            public function getBez4(x0:Number, x1:Number, x2:Number, x3:Number, x4:Number, x5:Number, t:Number):Number
            { var k0:Number; var k1:Number; var k2:Number; var k3:Number; var k4:Number;
              k0 = x0 + (x1 - x0) * t; k1 = x1 + (x2 - x1) * t;  k2 = x2 + (x3 - x2) * t; 
              k3 = x3 + (x4 - x3) * t; k4 = x4 + (x5 - x4) * t;
              
              k0 = k0 + (k1 - k0) * t; k1 = k1 + (k2 - k1) * t;   k2 = k2 + (k3 - k2) * t;
              k3 = k3 + (k4 - k3) * t;
              
              k0 = k0 + (k1 - k0) * t; k1 = k1 + (k2 - k1) * t;   k2 = k2 + (k3 - k2) * t;
              k0 = k0 + (k1 - k0) * t; k1 = k1 + (k2 - k1) * t;
              return k0 + (k1 - k0) * t;     
            }//getbez4
    
    
    
        
        public function doSpring(a:xNode, b:xNode, rest:Number=16, dt:Number=1):void
        {
            var dx:Number;   var dy:Number;
            var nx:Number;   var ny:Number;
            var ax:Number;   var ay:Number;
            var mag:Number;  var imp:Number;
        
             dx = a.cx - b.cx;  dy = a.cy - b.cy;
             mag = Math.sqrt(dx*dx + dy*dy);
             if (mag == 0) { mag = 0.00000001; }
        
             nx = dx / mag;    ny = dy / mag;            
             ax = a.vx - b.vx;     ay = a.vy - b.vy;
        
             imp = (((ax*nx+ay*ny) + ((mag - rest)/dt)) / (1+1)) * 0.5;
            
             a.vx += imp * (nx*-0.5) * 1;
             a.vy += imp * (ny*-0.5) * 1;
             b.vx += imp * (nx*0.5) * 1;
             b.vy += imp * (ny*0.5) * 1; 
            
        }//spring
        
        
        
    }//classend
}

internal class xNode
{
  public var cx:Number = 0;
  public var cy:Number = 0;
  public var vx:Number = 0;  
  public var vy:Number = 0;  
    
}//xnode