flash on 2015-11-16

by mutantleg
♥0 | Line 78 | Modified 2015-11-16 05:26:45 | 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/g169
 */

package {
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
       
           vecAct = new Vector.<xRect>(0, false);
       
           var i:int; var a:xRect;
           for (i=0;i<64;i+=1)
           {
             a = new xRect();
              a.cx = Math.random()*430;
              a.cy = Math.random()*430; 
              vecAct.push(a);
              a.xrad = 8+Math.random()*16; 
              a.yrad = 8+Math.random()*16; 
              
           }//nexti
       
           stage.addEventListener(Event.ENTER_FRAME, onEnter);     
        }//ctor
        
        public var vecAct:Vector.<xRect>;
        
        public function onEnter(e:Event):void
        {
            graphics.clear();
            graphics.lineStyle(2, 0);
            
            var i:int; var num:int; var a:xRect;
            num = vecAct.length;
            for (i=0;i<num;i+=1)
            {
              a = vecAct[i];
              
              a.vy += 0.3;
              
              a.vx *= 0.99;
              a.vy *= 0.99;
              
              if (a.cy > 465-a.yrad && a.vy>0) { a.vy *= -0.5; a.cy=465-a.yrad; }
              if (a.cx < a.xrad && a.vx<0) { a.vx *= -0.5; a.cx=a.xrad; }
              if (a.cx > 465-a.xrad && a.vx>0) { a.vx *= -0.5; a.cx=465-a.xrad;}
              
              checkCol(a);
              
              a.cx += a.vx;   a.cy += a.vy;
              
              graphics.beginFill(0x808080,1);  
               //graphics.drawCircle(a.cx,a.cy, a.rad);  
               graphics.drawRect(a.cx-a.xrad,a.cy-a.yrad,a.xrad*2,a.yrad*2);
              graphics.endFill();  
                
            }//nexti
            
        }//oenenter
        
        
        public function getMag(ax:Number,ay:Number):Number
        { return Math.sqrt(ax*ax+ay*ay); }
        
        public function checkCol(m:xRect):void
        {
            
            var i:int; var num:int; var a:xRect;
            var dot:Number; var nx:Number; var ny:Number;
            var ta:Number; var d:Number;
            num = vecAct.length;
            for (i=0;i<num;i+=1)
            {
                
              a = vecAct[i];
              if (a == m) { continue; } 
             // d = getMag(a.cx-m.cx, a.cy-m.cy);
              //if (d > a.rad+m.rad) { continue; } 
              if (a.cx - a.xrad > m.cx + m.xrad) { continue; }
              if (a.cx + a.xrad < m.cx - m.xrad) { continue; }
              if (a.cy - a.yrad > m.cy + m.yrad) { continue; }
              if (a.cy + a.yrad < m.cy - m.yrad) { continue; }
            
              ta = Math.atan2(a.cy-m.cy, a.cx-m.cx);
              
             //  m.cx += Math.cos(ta) * (d - (m.rad+a.rad))*0.25;
            //   m.cy += Math.sin(ta) * (d - (m.rad+a.rad))*0.25; 
              nx = Math.cos(ta);  ny = Math.sin(ta);
              
              dot = nx*m.vx + ny*m.vy;
               
              if (dot > 0)
              {
               m.vx -= nx * dot;
               m.vy -= ny * dot;
              }//endif    
            }//nexti
            
        }//checkkcol
        
        
    }
}

internal class xRect
{
  public var cx:Number = 0;
  public var cy:Number = 0;  
  public var vx:Number = 0;
  public var vy:Number = 0;  
  
  public var xrad:Number = 16;  
  public var yrad:Number = 16;  
    
}//xRect