代码如下:
请教大家一个关于势函数用到追踪和拦截的算法
有研究过的能不能指点一下!
PoweredBySunday
*/
varstepAngle:Number=3;
//角度最大增量
vartempNum:Number=0;
varradius:Number=100;
//导弹飞行半径
varM_speed:Number=3;
//导弹速度(非常量)
varP_speed:Number=5;
//飞机速度
findToHit(missile,target);
functionfindToHit(missile,target){
missile.onEnterFrame=function(){
_root.AngText=stepAngle;
if(missile.hitTest(target.hit)){
target.play();
missile._visible=false;
deletemissile.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;
}
}elseif((Math.abs(target._x-missile._x)<30||Math.abs(target._y-missile._y)<30)){
stepAngle=2;
}
tempNum=0;
}
//---------------------改变角度增量-------------------------
P=newObject();
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=newObject();
listen.onKeyDown=function(){
onEnterFrame=function(){
if(Key.isDown(Key.RIGHT)){
target._x+=P_speed;
}elseif(Key.isDown(Key.LEFT)){
target._x-=P_speed;
}elseif(Key.isDown(Key.UP)){
target._y-=P_speed;
}elseif(Key.isDown(Key.DOWN)){
target._y+=P_speed;
}
};
};
Key.addListener(listen);
//----------------------------键盘控制--------------------------