Rotate With Mouse Around (50,50)

by rfkrocktk forked from Rotate With Mouse Around (0,0) (diff: 11)
♥0 | Line 55 | Modified 2010-08-07 04:55:05 | MIT License
play

ActionScript3 source code

/**
 * Copyright rfkrocktk ( http://wonderfl.net/user/rfkrocktk )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/wF1w
 */

// forked from rfkrocktk's Rotate With Mouse Around (0,0)
package {
    import flash.text.TextFormat;
    import flash.text.TextField;
    import flash.display.Sprite;
    import flash.geom.Point;
    import flash.geom.Matrix;
    import flash.events.MouseEvent;    
    
    public class FlashTest extends Sprite {
        
        private var box:Sprite = new Sprite();
        
        private var tf:TextField = new TextField();
        
        private var downPoint:Point;
        
        private var registrationPoint:Point = new Point(50, 50);
        
        private var targetRotation:Number = 0;
        
        public function FlashTest() {
            this.box.graphics.beginFill(0x00000);
            this.box.graphics.drawRect(0, 0, 100, 100);
            this.box.graphics.endFill();
            
            this.box.x = 100;
            this.box.y = 100;
            
            this.tf.width = stage.stageWidth;
            this.tf.y = 300;
            this.tf.defaultTextFormat = new TextFormat("_sans");
            
            this.addChild(box); 
            this.addChild(tf);     
            
            this.box.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
        }
        
        private function onMouseDown(e:MouseEvent):void {
            this.downPoint = new Point(stage.mouseX, stage.mouseY);
            
            this.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
            this.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
        }
        
        private function onMouseMove(e:MouseEvent):void {
            var mouse:Point = new Point(stage.mouseX, stage.mouseY);
            
            var d1:Point = new Point(downPoint.x - this.box.localToGlobal(registrationPoint).x,
                    downPoint.y - this.box.localToGlobal(registrationPoint).y); 
            
            var angle1:Number = (Math.atan2(d1.y, d1.x) * 180) / Math.PI;
            
            var d2:Point = new Point(mouse.x - this.box.localToGlobal(registrationPoint).x,
                    mouse.y - this.box.localToGlobal(registrationPoint).y);  
            
            var angle2:Number = ((Math.atan2(d2.y, d2.x) * 180) / Math.PI);
            
            var angle:Number = angle2 - angle1;
            
            this.tf.text = "Angle of change: " + angle;
                  
            var matrix:Matrix = this.box.transform.matrix;
            var center:Point = new Point(box.transform.pixelBounds.width/2, box.transform.pixelBounds.height/2);
            var transformPoint:Point = matrix.transformPoint(center);
            
            matrix.translate(-transformPoint.x, -transformPoint.y);
            matrix.rotate(1.5 * Math.PI / 180);
            matrix.translate(transformPoint.x, transformPoint.y);
            
            this.box.transform.matrix = matrix;
        }

        private function onMouseUp(e:MouseEvent):void {
            this.stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
            this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
        }
    }
}