flash on 2013-7-2

by mutantleg
♥2 | Line 106 | Modified 2013-07-02 23:23:51 | 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/wyx6
 */

package {
    import flash.text.TextField;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
       
        public function FlashTest() {
          
          deb = new TextField();
          deb.mouseEnabled = false;
          deb.width = 320;
          deb.height = 240;
          addChild(deb);
          
          limba = getSpr(0xFF, d1);
          limbb = getSpr(0xFF0000, d2);
          
          addChild(limba);
          addChild(limbb);
          
          //ok so this is not IK but more like cheat-kinematics
          //only works if both bones the same length
          //and only works with 2
        
          
          
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        
        public function getSpr(c:uint, d:Number):Sprite
        {
          var s:Sprite;
          
          s = new Sprite();
          s.graphics.lineStyle(2,0);
          s.graphics.beginFill(c, 0.5);
           s.graphics.drawRect(0,-4, d, 8);
          s.graphics.endFill();  
            
            
            
            return s;
        }//getspr
        
        
        public var limba:Sprite;
        public var limbb:Sprite;
        
        public var deb:TextField;
        
        public var cx:Number = 200;
        public var cy:Number = 200;
        
        public var d1:Number = 50; //50;
        public var d2:Number = 50; //50;
        
        public var ratio:Number = 1;
        
        public function onEnter(e:Event):void
        {
            var mx:Number;
            var my:Number;
            
            var dx:Number;
            var dy:Number;
            var ang:Number;
            var mag:Number;
            
            var ax:Number;
            var ay:Number;

            var bx:Number;
            var by:Number;
            
            var dist:Number;
            
            mx = stage.mouseX;
            my = stage.mouseY;
            
            
            dist = d1 + d2;
            
            graphics.clear();
            graphics.lineStyle(2, 0);
            
            graphics.moveTo(cx, cy);
            graphics.lineTo(mx,my);
            
            
            dx = mx-cx ;
            dy = my-cy ;
            
            ang = Math.atan2(dy, dx);
            
            mag = Math.sqrt(dx*dx+dy*dy);
            
            ax = cx + Math.cos(ang)*dist;
            ay = cy + Math.sin(ang)*dist;
            
            var w:Number;
            
            
           // w = 1/((d1+d2)/d1);
          
          // w = 1 -w;
            w = 0.5;
            bx = cx + Math.cos(ang)*mag*w;//0.5;
            by = cy + Math.sin(ang)*mag*w;//0.5;
          
            
            graphics.drawCircle(ax, ay, 8);
            
            graphics.drawCircle(bx, by, 4);
            
         //   deb.text = "mag " + mag;
            
            var mag2:Number;
            
            if (mag > dist) { mag = dist;}
            if (mag < 1) { mag = 1; }
            
            mag2 = dist - mag;
            
            var kx:Number;
            var ky:Number;
            
            kx = bx+ -Math.sin(ang) * mag2;
            ky = by+Math.cos(ang) * mag2;
            
            graphics.drawCircle(kx, ky, 4);
            
            graphics.moveTo(cx,cy);
            graphics.lineTo(kx,ky);
            
            graphics.moveTo(mx,my);
            graphics.lineTo(kx,ky);
            
            var m1:Number;
            var m2:Number;
            
            m1 = getMag(cx-kx, cy-ky);
            m2 = getMag(mx-kx, my-ky);
          
         // deb.text = "m1 " + m1 + " \n " + m2 + " \n " + (m1+m2) + "\n ratio "  + ratio;
            
            
            limba.x = cx;
            limba.y = cy;
            
            ra = Math.atan2(ky-cy, kx-cx);
            limba.rotationZ = ra * (180/3.1415);
            
            var ra:Number;
            var rb:Number;
            var rx:Number;
            var ry:Number;
            
            //rx = d1*Math.cos(ra) - d1*Math.sin(ra);
            //ry = d1*Math.sin(ra) + d1*Math.cos(ra);
            
            rx = d1 * Math.cos(ra);
            ry = d1 * Math.sin(ra);
            
            limbb.x = cx+rx;
            limbb.y = cy +ry;
        
            rb = Math.atan2(my-(cy+ry), mx-(cx+rx));
        
            limbb.rotationZ = rb * (180/3.1415);


            deb.text = "ra " + ra + "\n rb " + rb + "\n w  "  +w;

        }//onenter
        
        
        public function getMag(dx:Number, dy:Number):Number
        {
            return Math.sqrt(dx*dx+dy*dy);
        }//getmag
        
        
        
        
        
    }//classend
}