package { import flash.display.*; public class Moving { //将一个mc对象指向另一个target,参数omega是角速度 public static function pointTo(mc:MovieClip,target:MovieClip,omega:Number=0) { var dx:Number=mc.x-target.x; var dy:Number=mc.y-target.y; //与X轴的夹角 //因为取到的是弧度,所以后面加了 *180/Math.PI 来转换成角度。 var angle:Number=(270+Math.atan2(dy,dx)*180/Math.PI)%360; //mc的最大旋转角度 var crtangle:Number=(angle-mc.rotation+360)%360; //判读mc的旋转方向 var dir:int=crtangle<=180?1:-1; if (omega) { mc.rotation=(crtangle<180&&crtangle>omega||crtangle>180&&360-crtangle>omega)?(mc.rotation+omega*dir):angle; } else { mc.rotation=angle; } } //将mc沿着竖直方向运动,运动速度为vspeed public static function moveDirectly(mc:MovieClip,vspeed:Number) { mc.y+=vspeed; } //将mc沿着某一方向运动,运动速度为speed public static function moveBeeline(mc:MovieClip,speed:Number,angle:Number) { if (angle!=0) { mc.rotation=- angle; mc.x+=speed*Math.sin(angle/180*Math.PI); mc.y+=speed*Math.cos(angle/180*Math.PI); } else { mc.y+=speed; } } //让mc跟踪另一个target //mc速度为speed //角速度omega //dir用来表示mc是趋向目标(1),还是远离目标(-1) public static function Track(target:MovieClip,mc:MovieClip,speed:Number,omega:Number=0,dir:int=1) { if (!target) { Moving.moveDirectly(mc,dir*speed/2); mc.rotation=dir>0?180:0; } else { var dx:Number=mc.x-target.x; var dy:Number=mc.y-target.y; //target与Y轴的夹角 var angle:Number=270+Math.atan2(dy,dx)*180/Math.PI%360; //target与mc的夹角 var crtangle:Number=angle-mc.rotation+360%360; //判断mc的旋转方向 var dir:int=crtangle<=180?1:-1; if (omega) { mc.rotation=crtangle<180&&crtangle>omega||crtangle>180&&360-crtangle>omega?mc.rotation+omega*dir:angle; } else { mc.rotation=angle; } mc.x+=speed*Math.sin(mc.rotation*Math.PI/180); mc.y-=speed*Math.cos(mc.rotation*Math.PI/180); } } //让一个mc对象斜着运动, //开始斜向移动的位置为startSlanting public static function moveSlanting(mc:MovieClip,vspeed:Number,hspeed:Number,startSlanting:Number) { mc.y+=vspeed; if (mc.y>startSlanting) { mc.x+=hspeed; } } //让一个mc螺旋运动 //螺旋中心运动速度为speed //螺旋中心位置(centerx,centery); //螺旋半径为radius //旋转速度angle public static function moveCircle(mc:MovieClip,speed:Number,radius:Number,angle:Number,centerx:Number,centery:Number):int { mc.x=radius*Math.sin(angle*Math.PI/180)+centerx; mc.y=radius*Math.cos(angle*Math.PI/180)+centery; var an:Number=Math.abs(angle%360); if (an<60||an>300) { return 1; } else if (an>120&&an<240) { return -1; } else { return 0; } } } }