运动方式工具类

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;
			}
		}
	}
}
posted on 2011-01-11 17:24  602147629  阅读(295)  评论(0编辑  收藏  举报