|
Flash的AS3代码打造游戏中跟随和范围内跟随的效果
其实只是将sin,cos函数的应用罢了。。。。会应用的话。。。会发现很都游戏的制作都离不开三角函数。。。。如果实在不知道三角函数是什么。。。。自己上网查去。。。
![]() 图1
Rt△ABC,∠C=90度。。。∠A所对的边叫a..∠B的对边叫b...这不用再由初中知识说起吧- -~
sin∠1=a:c=a/c(对边比斜边) cos∠1=b:c=b/c(邻边比斜边) 至于asin就是求sin的反值。。。sin是求边的比。。。那么asin就是用比来反求角的值 即asin(a:c)=∠1.. acos就是反求cos的值。。。详细不想说。。。 还有要用到的是钩股定理。。。 既a*a+b*b=c*c 如下图: ![]() 图2
d就可以通过(m.x-m.y)的平方加上(m.y-s.y)的平方的和再开方来求出
然后用asin(abs(m.y-s.y):d)求出∠1...既s1的值... 继续往下看: ![]() 图3
s1已知....(感觉在做数学题- -~)
i就是在1单位时间内移动的距离。。。。因为sin∠1=a:c 假设ss=sin(s1) 所以sin(s1)=a:c=a:i=ss,a=ss*i。 假设cos(s1)=b:c=b:1=cc,c=cc*i。 还有要注意的一个问题。。。。就是要计算出移动后的点的坐标。。。。
。。参照图2 (s.x,s.y) 要去追(m.x,m.y)那个红点。。。再参照图3,当红点在蓝点的右上方时————即(m.x>=s.x && m.y>=s.y) 蓝点移动到的点的坐标就是。。。。(s.x+cc*i,s.y+ss*i) 在右下方(m.x>=s.x && m.y<=s.y) 移动后的点(s.x+cc*i,s.y-ss*i) 在左下方时(m.x<=s.x,m.y<=s.y) 移动后的点(s.x-cc*i,s.y-ss*i) 在左上方时(m.x<=s.x && m.y>=s.y) 移动后点坐标(s.x-cc*i,s.y+ss*i) 源程序:
stage.addEventListener(MouseEvent.MOUSE_MOVE,moves); var i:int=int(q.text); var mou:Sprite=new Sprite();//用来得到鼠标的坐标 var s1:Number=0;//角 var d:Number=0;//两点的距离 addChild(mou); function moves(e:MouseEvent){ m.x=mou.mouseX; m.y=mou.mouseY; } stage.addEventListener(Event.ENTER_FRAME,mm); function mm(e:Event){ d=Math.sqrt(pf(abs(s.x-m.x))+pf(abs(s.y-m.y))); s1=Math.asin(abs(s.y-m.y)/d); if(d>=i){ if(m.x>=s.x && m.y>=s.y){ s.y+=Math.sin(s1)*i; s.x+=Math.cos(s1)*i; }else if(m.x<=s.x && m.y<=s.y){ s.y-=Math.sin(s1)*i; s.x-=Math.cos(s1)*i; }else if(m.x<=s.x && m.y>=s.y){ s.x-=Math.cos(s1)*i; s.y+=Math.sin(s1)*i; }else if(m.x>=s.x && m.y<=s.y){ s.x+=Math.cos(s1)*i; s.y-=Math.sin(s1)*i; } }else{ s.x=m.x; s.y=m.y; } } function abs(n:Number){ return(Math.abs(n)); }//计算绝对值 function pf(n:Number){ return n*n; }//计算平方 //以下是设定速度的按钮 b1.addEventListener(MouseEvent.CLICK,se); function se(e:Event){ i=int(q.text); } 详尽可以看源文件。。。。。请用Flash CS4打开。。。。 |
|
Time.2009-8-24 来源.http://www.gcity.com.cn 编辑.上海红提城信息科技有限公司
|
© 2002-2008 www.Gcity.com.cn 沪ICP备06055129号咨询热线:4008207959 021-33606181(红提城信息科技)
|