flash on 2016-9-6

by mutantleg
♥0 | Line 142 | Modified 2016-09-06 05:32:38 | 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/05VJ
 */

package {
    import flash.display.StageQuality;
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
       
           stage.quality =  StageQuality.MEDIUM;
           
           vecLine = new Vector.<xLine>(0, false);

          var a:xLine;          
          var x0:Number; var y0:Number;
          var x1:Number; var y1:Number;
          var i:int;

          x0 = 0; y0 = 330;
          x1 = 100; y1 = 330;
          
          for (i=0;i<32;i+=1)
          {
            a = new xLine(); vecLine.push(a);
            a.x0 = x0; a.y0 = y0;
            a.x1 = x1; a.y1 = y1;
          
            x0 = x1; y0 = y1;
            x1 = x0 + Math.random()*32+32;
            y1 = y0 + Math.random()*200-100;
          }//nexti 
          
          x0 = 0; y0 = 130;
          x1 = 100; y1 = 130;
       
          for (i=0;i<32;i+=1)
          {
            a = new xLine(); vecLine.push(a);
            a.x0 = x0; a.y0 = y0;
            a.x1 = x1; a.y1 = y1;
          
            x0 = x1; y0 = y1;
            x1 = x0 + Math.random()*32+32;
            y1 = y0 + Math.random()*200-100;
          }//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 vecLine:Vector.<xLine>;
        
        
            
        public var cx:Number =230;
        public var cy:Number =230;
        public var vx:Number =0;
        public var vy:Number =0;
        public var ang:Number =0;
        public var vang:Number=0;
        
        public var camx:Number = 0;
        public var camy:Number = 0;
        
        public function getMag(ax:Number,ay:Number):Number
        { return Math.sqrt(ax*ax+ay*ay); }

        public function onEnter(e:Event):void
        {
           graphics.clear();
           graphics.lineStyle(2, 0); 

                        
            vang *=0.9;
            vang = vx*0.1; ang+=vang;
            vx*=0.99;vy*=0.99;
            vy+=0.4;
            if (vy>8){vy=8;}

           var mx:Number; var my:Number;
           mx = stage.mouseX; my =stage.mouseY;
           if (mbutton > 0) { cx = mx+camx; cy = my+camy; }
           if ((cx-camx) < mx + 30 && vx < 3) { vx+= 1; }
           if ((cx-camx) > mx - 30 && vx > -3) { vx -= 1; }
           
           
           if (cy > 500) { cx = 235; cy =235; vx=0;vy=0;}
           
           camx +=  ((cx-230)-camx)*0.1;
           camy +=  ((cy-230)-camy)*0.1;

           var r:Number;
           var wr:Number;
           r=16;
           wr=16; 
           wr =2;
           
           var px:Number; var py:Number;
            
           px =cx; py=cy;
            
           graphics.drawCircle(px-camx,py-camy,r);
           graphics.moveTo(px-camx,py-camy);
           graphics.lineTo(px+Math.cos(ang)*r-camx,py+Math.sin(ang)*r-camy);
           
  
           
            
          
          var a:xLine;          
          var i:int; var num:int;
          var k:int;

          num = vecLine.length;
          for (i=0; i<num; i+=1)
          {           
            a = vecLine[i];
            
           graphics.drawCircle(a.x0-camx,a.y0-camy,4);
           graphics.drawCircle(a.x1-camx,a.y1-camy,4);
           graphics.moveTo(a.x0-camx,a.y0-camy);
           graphics.lineTo(a.x1-camx,a.y1-camy);
          }//nexti 
                    
          num = vecLine.length;
          for (k=0; k<4; k+=1)
          for (i=0; i<num; i+=1)
          {           
            a = vecLine[i];
            
          var t:Number;
           t = getClose(px,py,a.x0,a.y0,a.x1,a.y1);
           //graphics.drawCircle(closex-camx,closey-camy,wr);
            
            var dx:Number; var dy:Number;
            var mag:Number;
            dx= (px)-closex;dy=(py)-closey;
            mag = getMag(dx,dy);
            if (mag==0){mag=0.001;}
            dx/=mag;dy/=mag;
            if (mag<(r+wr))
            {
             
                
                
                
              var dot:Number;
              dot = vx*dx+vy*dy;  
              if (dot<0)
              {
                vx += -dx*dot;
                vy += -dy*dot;  
                
               //vang += (((vy*dx)+(dy*vx)) / -r)*0.3;
              } 
              
              /*
             graphics.moveTo(closex-camx,closey-camy);
             graphics.lineTo(closex-camx+dx*32,closey-camy+dy*32);   

             t = dx; dx=-dy; dy=t;
             vx+=dx*0.1; vy+=dy*0.1;
             graphics.moveTo(px-camx, py-camy);
             graphics.lineTo(px-camx+dx*32, py-camy+dy*32);   
              */
            }//endif
          }//nexti
          
          cx+=vx; cy+=vy;
            
        }//onenter
        
        public var closex:Number =0;
        public  var closey:Number =0;
        public function getClose(px:Number,py:Number, x0:Number,y0:Number,x1:Number,y1:Number):Number
        {
           var t:Number;
           var ax:Number; var ay:Number;
           var bx:Number; var by:Number;
           ax = px-x0; ay=py-y0;
           bx=x1-x0; by=y1-y0;
           t = (ax*bx+ay*by)/(bx*bx+by*by);
           if(t<0){t=0;} if(t>1){t=1;}
            closex=x0+bx*t;
            closey=y0+by*t;
           return t; 
        }//getclose
        
        
        
    }//classend
}

internal class xLine
{
  public var x0:Number = 0;
  public var y0:Number = 0;
  public var x1:Number = 0;
  public var y1:Number = 0;
  
}//xline