点から距離を求められるようになったので、矢印がカーソル位置を追跡するサンプルを作ってみた。
矢印の速度はランダムに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 ); } } }