繁体   English   中英

在Java中射击预测算法

[英]Shooting prediction algortithm in java

我当前的游戏开发人员爱好有一个问题。 我有两个单位,它们在2D空间中是敌对的。 一个是直接向对手开枪,因此如果他移动,就会错过。 但是对方应该预测对手的动作并“朝前”射击。

假设第一个单位是A,第二个单位是B。我可以计算它们的距离,并确定它们的视角,并确定它们的移动速度。 (玩家速度和子弹速度是不同的常数)

我尝试近似地计算出A和B之间的距离,然后使用Bv和方向角来计算B在下一秒的位置,然后用两个玩家的距离除以子弹速度来缩放。 但这是非常低效的,并且效果不佳。

float distanceK = MathUtil.distance(unit.x, unit.y, opponent.x, opponent.y) / Constants.BULLET_VELOCITY;

float x = (float) (opponent.x + (Constants.UNIT_FORWARD_VELOCITY * distanceK * Math.cos(opponent.orientationAngle)));
float y = (float) (opponent.y + (Constants.UNIT_FORWARD_VELOCITY * distanceK * Math.sin(opponent.orientationAngle)));

float angleToRotate =  MathUtil.angleBetweenUnitAndPoint(unit, x, y);

在上面的示例中,我然后使用angleToRotate变量来确定要旋转多少才能击中对手,但旋转也需要一些时间(54deg / s)

对于这个问题,我需要一个更优化的解决方案。

a)静止不动时预测对手的动作。

b)在移动时预测对手的移动。

您可以使用空间的矢量表示。 因此,从A的角度来看,BA将代表A和B之间的向量。 然后,您可以添加单位B速度的矢量Bv。 所得向量将是B与Bvp之间的向量,该向量是将来某个时间t处B的预测位置。 至于移动计算,您还需要考虑A的移动向量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM