角度を求めるサンプル
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 );
}
}
}
カテゴリー: 数学・物理
Leave a comment
コメントはまだありません
No comments yet.