Blog.Ks-Product.com

初音ミクの消失PV(特別編集版)が初音ミクVISION(DVD)に収録されます!詳しくはこちら! 設定不要!プリロード機能付きロールオーバープラグイン jquery.automaticRollover 有名動画サイトの動画の埋め込みが簡単に行える! jquery.createvideo

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

 

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
コメント
名前:
kakeru ( twitter
職業:
フロントエンドエンジニア
生年月日:
1983年4月19日

HTML、CSS、JavaScript、ActionScript、デザイン、映像制作(After Effects、CINEMA 4D)で遊んでます。
最近はjQueryを使ったプログラミングに色んな意味ではまってます。ライブラリ作ってます。

好きなK-POPはf(x)、Brown eyed girls、4minute、B2ST、2PM、KARA、SNSD、Sunny hillということで、K-POPの話題を中心に発信中!

お問い合わせはこちらからどうぞ。
kakeru[at]ks-product.com
([at]を@に置き換えてください)