前言
本篇将给大家准备一个高级瞄准运动方法。
高级运动瞄准
其基本原理是:
change in x = cos(initialheading) * radius - cos(initialheading + changeinheading) * radius
change in y = sin(initialheading + changeinheading) * radius - sin(initialheading) * radius
其中initialheading是敌方机器人在初始位置的方向,子弹飞行期间的方向变化为 changeinheading,我们假定它以 radius为圆周半径运动。
每转的方向变化:
headingchangeperturn =
(heading2 - heading1)/time 得到这个值,其中 time是两次测量的间隔时间;
子弹运动时间:
time = getTime()+(range/(20-(3*firepower))) ,其中 range是发射时我们和敌人之间的距离,而 firepower是我们计划使用的射击火力;
半径:radius = velocity/headingchangeperturn。
实现代码如下:
double bulletVelocity = 20 - 3 * bulletPower;
double headingSet = enemy.headingRadian - enemy.prevHeadingRadian + 0.00001;
double r = enemy.velocity / headingSet;
double predictDirection = 0.0;
double enemyDistance = enemy.distance;
for( int i = 0; i < 4; i++){
double bulletTravelTime =
enemyDistance / bulletVelocity;
double predictX, predictY;
double predictHeadingRadian = enemy.headingRadian + headingSet * bulletTravelTime;
predictX = enemy.xCoordinate - r * Math.cos( predictHeadingRadian ) + r*Math.cos( enemy.headingRadian );
predictY = enemy.yCoordinate + r * Math.sin( predictHeadingRadian ) - r * Math.sin(enemy.headingRadian );
predictDirection = enemy.getAngle( getX(), getY(), predictX, predictY );
enemyDistance = Point2D.distance( getX(), getY(), predictX, predictY );
}
好啦,本期内容就到这里喽,我是不会玩游戏却非得写游戏的陈老师,一起来学习JAVA吧!
网友评论