运动方式工具类

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;

			}

		}

	}

}

你可能感兴趣的:(工具类)