flash on 2015-8-17

by mutantleg
♥0 | Line 105 | Modified 2015-08-17 09:16:34 | 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/rPzt
 */

package {
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {

            graphics.clear();
            graphics.lineStyle(2, 0);

            vecLine = new Vector.<xLine>(0,false);       
            
          var ta:Number;
            var a:xLine;    var i:int; var num:int;
            for (i=0;i< 32;i+=1)
            {
              a = new xLine();
               a.cx = Math.random()*465;
               a.cy = Math.random() *465;
               a.gx = a.cx+Math.random() * 128;
               a.gy = a.cy+Math.random() * 128;
                
              vecLine.push(a);  
              
              ta = Math.atan2(a.gy-a.cy, a.gx-a.cx);
              a.ny = -Math.cos(ta);
              a.nx = Math.sin(ta);
     
              if (Math.random()<0.5) { a.ny*=-1; a.nx*=-1; }
     
            }//nexti
            
           stage.addEventListener(Event.ENTER_FRAME, onEnter);          
        }//ctor

        public var vecLine:Vector.<xLine>;

        public function cutLine(a:xLine, ax:Number, ay:Number, nx:Number, ny:Number):Number
        {
            var ta:Number; var tb:Number; 
            
            ta = (a.cx-ax)*nx + (a.cy-ay) * ny;
            tb = (a.gx-ax)*nx + (a.gy-ay) * ny;
            
            if (ta < 0 && tb < 0) { return - 1; }
            if (ta > 0 && tb > 0) { return - 1; }
            
            return  ta / ( (a.cx-a.gx)*nx + (a.cy-a.gy)* ny);
        }//cutline

        public var gt:int = 0;

        public function onEnter(e:Event):void
        {
            graphics.clear();
            graphics.lineStyle(2, 0);
   
            gt += 1;
   
            var ax:Number; var ay:Number; var ta:Number;
            var a:xLine;    var i:int; var num:int;
            var b:xLine;
            var mx:Number; var my:Number;
            var t:Number;
            var cw:Number; var ch:Number;
            cw =32; ch =32;
            cw=64; ch = 64;
            
            mx = stage.mouseX; my = stage.mouseY;

            var kx:Number; var ky:Number;
            kx = cw * gt; ky = ch*gt;

            graphics.lineStyle(1, 0x808080);

            for (i=0;i< 16;i+=1)
            {
                graphics.moveTo(0,i*ch); graphics.lineTo(465,i*ch);
                graphics.moveTo(i*cw,0); graphics.lineTo(i*cw,465);
                
            }//nexti
            graphics.lineStyle(1, 0);

           

            num = vecLine.length;
            for (i=0;i<num;i+=1)
            {
                a = vecLine[i];
                t = cutLine(a, kx, ky, 1, 0);
                if (t <=0 || t >=1)
                { t = cutLine(a, kx, ky, 0, 1); }
               
                if (t <=0 || t >=1)
                { continue; }
               
                   ax = a.cx +(a.gx-a.cx) * t;
                   ay = a.cy +(a.gy-a.cy) * t;
                 
                 if (vecLine.length < 256)
                 {
              
                  b = new xLine();
                  b.cx = ax; b.cy =ay;
                  b.gx= a.gx; b.gy = a.gy;    
                  b.nx = a.nx; b.ny = a.ny; 
                  
                  a.gx = ax;
                  a.gy = ay;
                 vecLine.push(b);
                 }//endif     
            }//nexti

            /*
            num = vecLine.length;
            for (i=0;i<num;i+=1)
            {
                a = vecLine[i];
                t = cutLine(a, mx,my, 1, 0);
                if (t > 0 && t < 1)
                {
                   ax = a.cx +(a.gx-a.cx) * t;
                   ay = a.cy +(a.gy-a.cy) * t;
                 graphics.drawCircle(ax,ay,4);
                }
                t = cutLine(a, mx,my, 0, 1);
           
                if (t > 0 && t < 1)
                {
                      ax = a.cx +(a.gx-a.cx) * t;
                      ay = a.cy +(a.gy-a.cy) * t;
                    graphics.drawCircle(ax,ay,4);
                }    
            }//nexti
            */
            
               num = vecLine.length;
            for (i=0;i<num;i+=1)
            {
                a = vecLine[i];
                 graphics.moveTo(a.cx,a.cy);
                 graphics.lineTo(a.gx,a.gy);

                ax = a.cx+(a.gx-a.cx)*0.5;
                ay = a.cy+(a.gy-a.cy)*0.5;
                
                graphics.moveTo(ax,ay);
                graphics.lineTo(ax+a.nx*8,ay+a.ny*8);
                
                graphics.drawCircle(a.cx,a.cy,4);
                
            }//nexti
        }//onenter

        
    }//classend
}



internal class xLine
{
    public var cx:Number = 0;
    public var cy:Number = 0;
    public var gx:Number = 0;
    public var gy:Number = 0;
    
    public var nx:Number = 0;
    public var ny:Number = 0;
    
}//xline