前几天一个3D项目上要运用到 方向箭头(鼠标往哪移,箭头就转动一定的角度指向哪)!!
demo: http://6921.ggii.net/swf/ok.swf
操作是: 按下鼠标,并且移动鼠标观察效果!
下面将其代码贴出来:
MC是箭头影片剪辑 实例为arro
Circle 是一个转动的园 按下鼠标,固定在按下点处 实例 circle
代码是在时间轴上写的:
var arro:Sprite= Sprite(new MC());
var circle:MovieClip= MovieClip(new Circle());
arro.name="arro";
circle.name="circle";
stage.addEventListener(MouseEvent.MOUSE_DOWN,onDown,false,1,true);
stage.addEventListener(MouseEvent.MOUSE_UP,onUp,false,1,true);
stage.addEventListener(MouseEvent.MOUSE_MOVE,onMove,false,1,true);
addEventListener(Event.ENTER_FRAME,onFrame,false,1,true);
var tx,ty,gx,gy:int;
var isDown:Boolean;
function onDown(e:MouseEvent) {
isDown=true;
tx=e.stageX;
ty=e.stageY;
Mouse.hide();
addChild(circle);
positionCircle(tx,ty);
}
function onUp(e:MouseEvent) {
graphics.clear();
isDown=false;
Mouse.show();
if (getChildByName(circle.name)!=null) {
removeChild(circle);
}
if (getChildByName(arro.name)!=null) {
removeChild(arro);
}
}
function onMove(e:MouseEvent) {
gx=e.stageX;
gy=e.stageY;
if (isDown) {
addChild(arro);
arro.x=gx;
arro.y=gy;
}
}
function positionCircle(tx:int,ty:int) {
circle.x=tx;
circle.y=ty;
}
function onFrame(e:Event) {
// 处理鼠标旋转
var disX:int=gx-tx;
var disY:int=gy-ty;
var angle:Number=Number(Math.atan(disY/disX)*180/Math.PI);// atan返回的是弧度值,要转换为角度值
//if (disX == 0) { 这里不需要处理 这点是特殊点 可以忽略不计
//if(disY>=0){
//
//angle=90}else{
//
//angle=270
//
//
//
//}
//}
//
if (disX>0) {
//do nothing
}
if (disX<0) {
angle=angle+180;
}
arro.rotation=angle
// draw line
if (isDown) {
graphics.clear();
graphics.moveTo(tx,ty);
graphics.lineStyle(3,0xFFFFFF);
graphics.lineTo(gx,gy);
trace("ok");
}
}