flash on 2016-3-16

by mutantleg
♥0 | Line 96 | Modified 2016-03-16 08:17:22 | 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/W1aN
 */

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 xa:xNode;
            var a:xNode;
            a = new xNode();
            a.cx=230;a.cy=230;
            vecNode.push(a);
            xa = a;
            
            a = new xNode();
            a.wx = -8; a.wy=-32;
            a.parent = xa;
            vecNode.push(a); 
            
            a = new xNode();
            a.wx = -8; a.wy=32;
            a.parent = xa;
            vecNode.push(a); 
            
            stage.addEventListener(MouseEvent.CLICK, onClick);
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public function onClick(e:MouseEvent):void
        {
            var b:xNode; var a:xNode;
            b= vecNode[0];
            
            var rx:Number; var ry:Number;
            var ax:Number; var ay:Number;
            ax = stage.mouseX; ay = stage.mouseY;
            ax-=b.cx; ay-=b.cy;
            rx = Math.cos(-b.ang)*ax - Math.sin(-b.ang)*ay;
            ry = Math.sin(-b.ang)*ax + Math.cos(-b.ang)*ay;
            
            
            a = new xNode();
             a.wx = rx;
             a.wy = ry;
             a.wang = 0;
             a.parent = b;
             vecNode.push(a);
            
            
        }//onclick
        
        
        public var vecNode:Vector.<xNode>;
        
        public function onEnter(e:Event):void
        {
            graphics.clear();
            graphics.lineStyle(2, 0);
            
            a = vecNode[0];
            //a.ang = Math.atan2(stage.mouseY-a.cy,stage.mouseX-a.cx);
            a.ang += 0.01;
            
            
            var a:xNode; var b:xNode;
            var i:int; var num:int;
            num = vecNode.length;
            for(i=0;i<num;i+=1)
            {
              a = vecNode[i];
               if (a.parent != null)
               {
                 b = a.parent;
                 setPos(a, a.wx,a.wy, b.cx,b.cy, b.ang);
                 a.ang = a.wang + b.ang;   
                 graphics.moveTo(a.cx,a.cy);
                 graphics.lineTo(b.cx,b.cy);
               }
              
              
                graphics.drawCircle(a.cx,a.cy,8);
                graphics.moveTo(a.cx,a.cy);
                graphics.lineTo(a.cx+Math.cos(a.ang)*8,a.cy+Math.sin(a.ang)*8);
            }//nexti
            
            
        }//onenter
        
        public function swapNode(a:xNode, b:xNode):void
        {
          var i:int; var k:int;
          i = vecNode.indexOf(a); if (i==-1){return;}
          k = vecNode.indexOf(b); if(k==-1){return;}
          vecNode[k]=a; vecNode[i] =b;  
        }//swapnode
        
        
        public function setPos(a:xNode, ax:Number, ay:Number, cx:Number, cy:Number, ta:Number):void
        {
          var ux:Number; var uy:Number;
          var vx:Number; var vy:Number;
          var nx:Number; var ny:Number;
          nx = Math.cos(ta); ny = Math.sin(ta);
          
          ux = nx*ax; uy = ny*ax;
          vx = -ny*ay; vy = nx*ay;
          a.cx = cx + ux + vx; a.cy = cy + uy + vy; 
              
        }//setpos
        
    }//classend
}

internal class xNode
{
  public var cx:Number = 0;
  public var cy:Number = 0;
  public var ang:Number = 0;  
    public var parent:xNode = null;
 
  public var wx:Number = 0;
  public var wy:Number = 0;
  public var wang:Number = 0; 
    
}//xnode