zoukankan      html  css  js  c++  java
  • 运动方式工具类

    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;
    			}
    		}
    	}
    }
    
  • 相关阅读:
    重写JSON的部分用fetch的API
    给网站插入一个百度地图API
    给网站写一个JSON,并远程请求。
    Object的起源及一个函数的标准形式、mechanism分析
    js中关于for 的几个函数及关于构造器或结构体与对象的关系及Arrow functions
    program的发展史及own forecast(后面的才是干货)
    indexof函数分析及其计数字符串函数、正则表达式的例子及分析
    DOM&BOM(source、methods、contents、Application)
    CSS单位分析及CSS颜色表示法、颜色表(调色板)
    一个简单的grid布局基础例子注释及相关分析
  • 原文地址:https://www.cnblogs.com/602147629/p/1933085.html
Copyright © 2011-2022 走看看