Rotation

by quail24eggs
♥0 | Line 53 | Modified 2011-03-29 11:18:37 | MIT License
play

ActionScript3 source code

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

//なんで中心がズレてくんだろ?
package {
    import flash.display.Sprite;
    import flash.geom.Matrix;
    import flash.geom.Point;
    import flash.events.Event;
    public class Main extends Sprite {
        public function Main():void {
            // 以下 四角形描写
            var sq1:Sprite = new Sprite();
            sq1.graphics.beginFill(0xFFFFFF* Math.random());
            sq1.x = 100;
            sq1.y = 100;
            sq1.alpha = 0.3;
            sq1.graphics.drawRect(0,0,100,100);
            this.addChild(sq1);
            
            var sq2:Sprite = new Sprite();
            sq2.graphics.beginFill(0xFFFFFF* Math.random());
            sq2.x =110;
            sq2.y = 110;
            sq2.alpha = 0.3;
            sq2.graphics.drawRect(0,0,85,85);
            this.addChild(sq2);
            
            var cPoint:Point = new Point(sq1.width/2, sq1.height/2);
            //sq1左上~sq1中心            
            var tPoint:Point = cPoint.add(new Point(sq1.x, sq1.y));
            //画面左上(原点)~sq1中心
            var cPoint2:Point = new Point(sq2.width/2, sq2.height/2);
            var tPoint2:Point = cPoint2.add(new Point(sq2.x, sq2.y));
            
            var dec:Number = 0.2;
            //減速
            
            addEventListener(Event.ENTER_FRAME, xRotate);
            addEventListener(Event.ENTER_FRAME, xRotate2);
            
            function xRotate(eventObject:Event):void{
            var mousePoint:Point = new Point(sq1.mouseX, sq1.mouseY);
            //sq1左上~マウス座標
            var myPoint:Point = mousePoint.subtract(cPoint);
            //sq1中心~マウス座標
            var nRadian:Number = Math.atan2(myPoint.y, myPoint.x);
            //sq1中心に対するマウスの角度(ラジアン)
            var myMatrix:Matrix = sq1.transform.matrix;
            myMatrix.translate( -tPoint.x, -tPoint.y);
            //sq1中心座標⇒原点
            myMatrix.rotate(nRadian * dec);
            //原点で回転
            myMatrix.translate(tPoint.x, tPoint.y);
            trace(tPoint.x);
            trace(tPoint.y);
            //原点⇒sq1中心座標
            sq1.transform.matrix = myMatrix;
            //回転実行
            }
            
            function xRotate2(eventObject:Event):void{
            var mousePoint2:Point = new Point(sq2.mouseX, sq2.mouseY);
            var myPoint2:Point = mousePoint2.subtract(cPoint2);
            var nRadian2:Number = Math.atan2(myPoint2.y, myPoint2.x)+Math.PI/4;
            var myMatrix2:Matrix = sq2.transform.matrix;
            myMatrix2.translate( -tPoint2.x, -tPoint2.y);
            myMatrix2.rotate(nRadian2 * dec/2);
            myMatrix2.translate(tPoint2.x, tPoint2.y);
            sq2.transform.matrix = myMatrix2;
            }
        }

    }
}