Ks-Product.com

指定された軸を基準にオブジェクトを回転させるサンプル

ASのリハビリということでこんなサンプルを作ってみました。画面クリックで基準点が切り替わります。中学低学年レベルのまま止まっている苦手な数学も少し使ってみました。

ドキュメントクラスに"TestMatrix"を指定してください。4つのボールはあらかじめオーサリング時にステージに配置してあります。
ちなみに、ソースの解説はしません。数学は苦手分野なので下手に説明して間違った知識が広まってしまっては困りますからね^^;


package  
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.Point;
    /**
     * ...
     * @author Ks-Product.com
     */
    public class TestMatrix extends Sprite
    {
        public var axis:Sprite;
        public var axisX:Number;
        public var axisY:Number;
        public var ballArray:Vector.<sprite>;
        
        public function TestMatrix() 
        {
            axisX = 100;
            axisY = 200;
            axis = new Sprite();
            axis.graphics.beginFill(0x000000);
            axis.graphics.drawCircle(0, 0, 5);
            axis.graphics.endFill();
            axis.x = axisX;
            axis.y = axisY;
            addChild(axis);
            ballArray = Vector.<sprite>([ball1, ball2, ball3, ball4]);
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
            stage.addEventListener(MouseEvent.CLICK, onClick);
        }
        
        private function onClick(e:MouseEvent):void 
        {
            axisX = axis.x = e.stageX;
            axisY = axis.y = e.stageY;
        }
        
        private function onEnterFrame(e:Event):void 
        {
            rotate(-3);
        }
                
        /**
         * 指定された軸を中心に回転する
         * @param angle
         * @param direction
         */
        public function rotate(angle:Number,direction:Boolean = false):void
        {
            /* cos -sin | x
             * sin cos  | y
             * 
             * cos*x - sin*y
             * sin*x + cos*y
             * 
             * */
            
             var r:Number = angle * Math.PI / 180;
             var cos:Number = Math.cos(r);
             var sin:Number = Math.sin(r);
             
             for (var i:uint = 0; i < ballArray.length; i++) {
                 var tx:Number = ballArray[i].x - axisX;
                 var ty:Number = ballArray[i].y - axisY;
                 
                 var nx = cos * tx - sin * ty;
                 var ny = sin * tx + cos * ty;
                 
                 ballArray[i].x = nx + axisX;
                 ballArray[i].y = ny + axisY;
                 if(direction) ballArray[i].rotation += angle;
             }
             
        }
        
    }

}

コメント(0)

コメントが存在しません。

コメントを投稿する

※投稿されたコメントは管理人が承認するまで反映されません。
またHTMLタグはご利用できません。コメント上にHTMLタグを表示させたい場合は全角でご入力ください。

お名前
サイトURL
コメント
  • Home
  • > 指定された軸を基準にオブジェクトを回転させるサンプル
名前:
kakeruニコ動twitter
職業:
neet(転職活動中)
生年月日:
1983年4月19日

Flash(ActionScript)で食っていけたらなと思う今日この頃…とりあえず、年末年始にかけて転職活動できるようにごにょごにょ…

Powered by Movable Type.

ご覧の環境ではこのコンテンツはご利用できません。
最新のFlashPlayerをダウンロードしてからご利用ください。
Get Adobe Flash player