论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash AS编程教程
Tag:2.0,3.0菜鸟,游戏,,cs,技巧,源码,,文本,文字,函数,音乐,随机,拖拽,asp,access,xml,mc,视频教程

游戏中导弹追踪的算法

文章类别:Flash AS编程 | 发表日期:2008-10-6 18:13:37


  先看下效果吧:

 

代码如下:

/* 
请教大家一个关于势函数用到追踪和拦截的算法
有研究过的能不能指点一下!
Powered By Sunday
Email:happyclub@163.com
*/
var stepAngle:Number = 3;
//角度最大增量
var tempNum:Number = 0;
var radius:Number = 100;
//导弹飞行半径
var M_speed:Number = 3;
//导弹速度(非常量)
var P_speed:Number = 5;
//飞机速度
findToHit(missile, target);
function findToHit(missile, target) {
missile.onEnterFrame = function() {
  _root.AngText = stepAngle;
  if (missile.hitTest(target.hit)) {
   target.play();
   missile._visible = false;
   delete missile.onEnterFrame;
  }
  //---------------击中目标                        
  tempNum++;
  if (tempNum == 15) {
   if (stepAngle == 2) {
    if (Math.abs(target._x-missile._x)>radius*2 || Math.abs(target._y-missile._y)>radius*2) {
     stepAngle = 3;
    }
   } else if ((Math.abs(target._x-missile._x)<30 || Math.abs(target._y-missile._y)<30)) {
    stepAngle = 2;
   }
   tempNum = 0;
  }
  //---------------------改变角度增量-------------------------                                               
  P = new Object();
  P.x = missile.way._x;
  P.y = missile.way._y;
  missile.localToGlobal(P);
  dx = P.x-missile._x;
  dy = P.y-missile._y;
  dx1 = target._x-P.x;
  dy1 = target._y-P.y;
  //----------------------取得向量-------------------------- 
  angle = Math.atan2(dy1, dx1)*180/Math.PI;
  //-----------------------取得角度------------------------
  angle = angle<=0 ? Math.abs(360+angle) : angle;
  M_angle = missile._rotation<0 ? 360+missile._rotation : missile._rotation;
  if (Math.abs(M_angle-angle)>stepAngle) {
   if (angle-M_angle>180) {
    M_angle += -stepAngle;
   } else {
    M_angle += angle<M_angle && (M_angle-angle<180) ? -stepAngle : +stepAngle;
   }
   missile._rotation = M_angle;
  }
  //---------------------改变导弹角度-----------------------     
  missile._x += dx*M_speed/10;
  missile._y += dy*M_speed/10;
  //-----------------------导弹移动---------------------
};
}
//-----------------------------追踪---------------------
listen = new Object();
listen.onKeyDown = function() {
onEnterFrame = function () {
  if (Key.isDown(Key.RIGHT)) {
   target._x += P_speed;
  } else if (Key.isDown(Key.LEFT)) {
   target._x -= P_speed;
  } else if (Key.isDown(Key.UP)) {
   target._y -= P_speed;
  } else if (Key.isDown(Key.DOWN)) {
   target._y += P_speed;
  }
};
};
Key.addListener(listen);
//----------------------------键盘控制--------------------------

看看源文件: 游戏中导弹追踪算法.rar
视频教程列表
文章教程搜索
 
Flash AS推荐教程
Flash AS热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058