角度を求めるサンプル

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