flash on 2015-8-6

by mutantleg
♥0 | Line 84 | Modified 2015-08-06 22:15:02 | 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/2bn4
 */

package {
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            vecRect = new Vector.<xRect>(0, false);
              var a:xRect; var i:int;
              for (i = 0; i < 16; i += 1)
              {
                a = new xRect();
                var t:Number;
                t = i * 0.4;
                a.cx = 320+Math.cos(t)*160;
                a.cy = 240 + Math.sin(t) * 160;
                //a.cx = i*24;   a.cy = 100;
                a.xrad = 8 + i ;
                a.xrad = 16;
                vecRect.push(a);
                
              }//nexti

            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public var vecRect:Vector.<xRect>;
          

        public function isInside(ax:Number, ay:Number, a:xRect):Boolean
        { 
          if (ax < a.cx - (a.xrad)) { return false; }        if (ax > a.cx + (a.xrad)) { return false; }
          if (ay < a.cy - (a.xrad)) { return false; }        if (ay > a.cy + (a.xrad)) { return false; }
          return true;    
        }//isinside
         
  
        public function getMag(ax:Number, ay:Number):Number
        { return Math.sqrt(ax*ax+ay*ay); }

        public var gt:int = 0;
        
        public function onEnter(e:Event):void
        {
            var mx:Number; var my:Number;
            mx = stage.mouseX;
            my = stage.mouseY;
            
            graphics.clear();
            graphics.lineStyle(2, 0);
            
            
              var ang:Number;
              var vx:Number; var vy:Number;
              var a:xRect; var b:xRect;
              var num:int; var i:int; var k:int;
              var kx:Number; var ky:Number;
              
              num = vecRect.length;
              for (i = 0; i < num; i += 1)
              {
                a = vecRect[i];
               
               if ((gt+i)% 40 ==0)
               {
                   if (getMag(my-a.cy, mx-a.cx) > 140)
                   {  a.ang = Math.atan2(my-a.cy, mx-a.cx); }
                   else { a.ang = Math.atan2(my-a.cy, mx-a.cx) + 3.1415 + Math.random(); }
                 
               }       
                ang = a.ang;
                vx = Math.cos(ang) * 4;
                vy = Math.sin(ang) * 4;
        
                if (vx > 0 && a.cx > 465) { vx *= -1; a.ang+=3.1415; }
                else if (vx < 0 && a.cx < 0) { vx *= -1; a.ang+=3.1415; } 
                if (vy > 0 && a.cy > 465) { vy *= -1; a.ang+=3.1415; }
                else if (vy < 0 && a.cy < 0) { vy *= -1; a.ang+=3.1415; } 
            
                for (k = 0; k < num; k += 1)
                {
                  if (i == k) { continue; }
                  b = vecRect[k];
                  
                  if (vx > 0 && isInside(a.cx+a.xrad, a.cy, b)) { vx = 0;  }
                  else if (vx < 0 && isInside(a.cx-a.xrad, a.cy, b)) { vx = 0;  }
                  if (vy > 0 && isInside(a.cx, a.cy+a.xrad, b)) { vy = 0;  }
                  else if (vy < 0 && isInside(a.cx, a.cy-a.xrad, b)) { vy = 0;   } 
                  
                }//nextk        
                
                
                a.cx += vx; a.cy += vy;
             
                graphics.drawRect(a.cx - a.xrad, a.cy - a.xrad, a.xrad * 2, a.xrad * 2);
                graphics.drawCircle(a.cx, a.cy, a.xrad);
              }//nexti
            
            graphics.drawCircle(mx,my, 8);

            gt += 1;            
            
        }//onenter
        
    }//classend
}



internal class xRect
{
  public var cx:Number = 0;
  public var cy:Number = 0;
  public var xrad:Number = 16;
  public var ang:Number = 0;
  
}//xrect