角度を求めるサンプル

2008年10月21日 10:08

点から距離を求められるようになったので、矢印がカーソル位置を追跡するサンプルを作ってみた。
矢印の速度はランダムにTweenerに設定。
19行目のリスナー関数における引数はワイルドカードで通常呼び出しも可能とした。
その際は引数にnullを渡す(37行目)。

[swf]/blog/wp-content/uploads/2008/10/Arrow.swf, 550, 400[/swf]

package 
{
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import caurina.transitions.Tweener;

    public class Arrow extends Sprite {
        private var moveX:Number;
        private var moveY:Number;
        private var onMove:Boolean;
        
        //コンストラクタ
        public function Arrow():void {
            x = stage.stageWidth/2;
            y = stage.stageHeight/2;
            stage.addEventListener(MouseEvent.MOUSE_MOVE, arrowTurn, false, 0, true);
        }
        
        function arrowTurn(e:*):void {
            moveX = stage.mouseX;
            moveY = stage.mouseY;
            var radians:Number = rad2deg( Math.atan2(moveY - y, moveX - x) );
            radians %= 360;
            if (!onMove) {
                Tweener.addTween(this, { rotation:radians, time:1, transition:"easeOut", onComplete:arrowMove } );
            }
        }

        function arrowMove():void {
            onMove = true;
            var randomTime:Number = Math.random()*2+0.2;
            Tweener.addTween(this, { x:moveX, y:moveY, time:randomTime, transition:"easeOut", onComplete:compMove});
        }
        
        private function compMove():void {
            onMove = false;
            arrowTurn(null);
        }

        //ラジアン→度
        function rad2deg(rad:Number):Number{
            return rad * ( 180 / Math.PI );
        }
    }
}

カテゴリー: 数学・物理 

コメントはまだありません

No comments yet.

TrackBack URL

Leave a comment