如果利用象限来考虑,好吧,我自己写个lab得了:
其中的点是个自定义类,lib里的symbol上放置一个图案和一个TextField:
package {
import flash.display.*;
public class Point extends Sprite
{
public function Point()
{
// constructor code
}
}
}
下面的按钮用来获取A点和B点的信息,信息显示在左上角。而且两个点可以被拖拽移动:
package {
import flash.display.*;
import flash.events.*;
public class main extends MovieClip
{
private var _pointM:Point;
private var _pointA:Point;
private var _pointB:Point;
public function main()
{
this.addEventListener(Event.ADDED_TO_STAGE, this.addedToStageHandler);
}
// HANDLERS:
private function addedToStageHandler($e:Event):void
{
this._pointM = new Point();
this._pointM.labelTxt.text = "M";
this._pointM.mouseChildren = false;
this._pointM.x = 400;
this._pointM.y = 400;
this.addChild(this._pointM);
this._pointA = new Point();
this._pointA.labelTxt.text = "A";
this._pointA.mouseChildren = false;
this._pointA.x = 500;
this._pointA.y = 600;
this.addChild(this._pointA);
this._pointB = new Point();
this._pointB.labelTxt.text = "B";
this._pointB.mouseChildren = false;
this._pointB.x = 300;
this._pointB.y = 600;
this.addChild(this._pointB);
getABtn.addEventListener(MouseEvent.CLICK, this.getABtnClickedHandler);
getBBtn.addEventListener(MouseEvent.CLICK, this.getBBtnClickedHandler);
ptoABtn.addEventListener(MouseEvent.CLICK, this.ptoABtnClickedHandler);
ptoBBtn.addEventListener(MouseEvent.CLICK, this.ptoBBtnClickedHandler);
this._pointA.addEventListener(MouseEvent.MOUSE_DOWN, this.pointMouseDownHandler);
this._pointA.addEventListener(MouseEvent.MOUSE_UP, this.pointMouseUpHandler);
this._pointB.addEventListener(MouseEvent.MOUSE_DOWN, this.pointMouseDownHandler);
this._pointB.addEventListener(MouseEvent.MOUSE_UP, this.pointMouseUpHandler);
}
private function pointMouseDownHandler($e:MouseEvent):void
{
$e.target.startDrag();
}
private function pointMouseUpHandler($e:MouseEvent):void
{
$e.target.stopDrag();
}
private function getABtnClickedHandler($e:MouseEvent):void
{
var $vactorX:Number = this._pointA.x - 400;
var $vactorY:Number = this._pointA.y - 400;
aPt_x.text = $vactorX.toString();
aPt_y.text = $vactorY.toString();
var $angleA:Number = Math.atan2($vactorY, $vactorX);
aPt_ang.text = $angleA.toString();
}
private function getBBtnClickedHandler($e:MouseEvent):void
{
var $vactorX:Number = this._pointB.x - 400;
var $vactorY:Number = this._pointB.y - 400;
bPt_x.text = $vactorX.toString();
bPt_y.text = $vactorY.toString();
var $angleB:Number = Math.atan2($vactorY, $vactorX);
bPt_ang.text = $angleB.toString();
}
private function ptoABtnClickedHandler($e:MouseEvent):void
{
arrow.rotation = degrees(Number(aPt_ang.text.toString()));
}
private function ptoBBtnClickedHandler($e:MouseEvent):void
{
arrow.rotation = degrees(Number(bPt_ang.text.toString()));
}
private function degrees(radians:Number):Number
{
return radians * 180/Math.PI;
}
}
}
注意:displayObject的rotation属性使用的角度是以度(degree)为单位,而通过Math类的三角函数方法所操纵的角度值则是以弧度(radian)为单位,请参照:atan2()。
两者互转的函数为:
function degrees(radians:Number):Number
{
return radians * 180/Math.PI;
}
function radians(degrees:Number):Number
{
return degrees * Math.PI / 180;
}
Refs: