当前位置: 首页 > 图文教程 > Flash动画 > Flash动画制作 > Flash游戏制作:敌人穷追不舍的动画研究

Flash动画制作
赤手空拳下载Flash
创建一个Flash站点的十大技巧
用Flash制作Google搜索程序
枫桥夜泊下 遮罩效果的动态文本
Flash MX 2004 ActionScript图文教程(十二)
Flash实例教程 扫描文字效果
Flash MX 2004 ActionScript图文教程(十三)
快速制作您的flash图表
Flash MX 2004 ActionScript图文教程(十四)
Flash实例教程 变幻的字母
Flash MX 2004 ActionScript图文教程(十五)
Flash实例教程 相约北京 扬帆青岛
Flash教程实例 光线特效文字
Flash课件实例 画正多边形
Flash课件实例 平行四边形法则
Flash实例教程 小孔成像课件
精简Flash文件体积七法
Flash教程实例:水中浮动的文字
金鸡贺岁!Flash制作鸡年新春动画贺卡
Flash MX 2004新特性实例学习一

Flash动画制作 中的 Flash游戏制作:敌人穷追不舍的动画研究


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-04   浏览: 47 ::
收藏到网摘: n/a

 中考完了。。。。终于有时间出来休息。。。原本打算暑假里做一下游戏。。。但实在没这个精力。。。。宁愿去玩其它。。。毕竟一个人做游戏是辛苦麻烦事情。。。从画功到编程。。。所谓关于在Flash中实现追逐。。就是敌人对你穷追不舍的效果。。。。

其实只是将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)

源程序:
  1. stage.addEventListener(MouseEvent.MOUSE_MOVE,moves);
  2. var i:int=int(q.text);
  3. var mou:Sprite=new Sprite();//用来得到鼠标的坐标
  4. var s1:Number=0;//角
  5. var d:Number=0;//两点的距离
  6. addChild(mou);
  7. function moves(e:MouseEvent){
  8.         m.x=mou.mouseX;
  9.         m.y=mou.mouseY;
  10. }
  11. stage.addEventListener(Event.ENTER_FRAME,mm);
  12. function mm(e:Event){
  13. d=Math.sqrt(pf(abs(s.x-m.x))+pf(abs(s.y-m.y)));
  14. s1=Math.asin(abs(s.y-m.y)/d);
  15. if(d>=i){
  16. if(m.x>=s.x && m.y>=s.y){
  17. s.y+=Math.sin(s1)*i;
  18. s.x+=Math.cos(s1)*i;
  19. }else if(m.x<=s.x && m.y<=s.y){
  20. s.y-=Math.sin(s1)*i;
  21. s.x-=Math.cos(s1)*i;
  22. }else if(m.x<=s.x && m.y>=s.y){
  23.   s.x-=Math.cos(s1)*i;
  24.   s.y+=Math.sin(s1)*i;
  25. }else if(m.x>=s.x && m.y<=s.y){
  26.   s.x+=Math.cos(s1)*i;
  27.   s.y-=Math.sin(s1)*i;
  28. }
  29. }else{
  30.   s.x=m.x;
  31.   s.y=m.y;
  32. }
  33. }
  34. function abs(n:Number){
  35.         return(Math.abs(n));
  36. }//计算绝对值

  37. function pf(n:Number){
  38.         return n*n;
  39. }//计算平方
  40. //以下是设定速度的按钮
  41. b1.addEventListener(MouseEvent.CLICK,se);
  42. function se(e:Event){
  43.         i=int(q.text);
  44. }
详尽可以看源文件。。。。。请用Flash CS4打开。。。。

效果:


源文件:ms.rar

还有的就是在一定的范围内追逐目标。。。。
其实是计算出两点距离d后加一点判断。。。然后再执行移动。。。详细参考源文件。。。

效果:


源文件:ms2.rar

。。。讲玩。。。。打机去^_^