语录提交--登陆--注册--论坛交流--站长博客

游戏中导弹追踪的算法

[作者:来自网络][日期:2007-12-28][导航:Flash教程 >> Flash游戏编程 >> 游戏中导弹追踪的算法]
  

先看下效果吧:

代码如下:

 

/*

 

请教大家一个关于势函数用到追踪和拦截的算法

有研究过的能不能指点一下!

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按键控制(复合键,八方向键)

下一页:物理运动学公式汇总

最新话题

网站导航

搜索

网站公告


Copyright 2007 51as.com. Some Rights Reserved.
鄂ICP备07003189号

Powered by: KingCMS 5.0.1.0217