我在当前的游戏开发爱好中有一个问题。我有两个单元,它们在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
变量来确定我必须旋转多少才能击中对手,但是旋转也需要一些时间(54维/s)
我将需要一个更最佳的解决方案来解决此问题。
a)静止不动时预测对手运动。
b)当您移动时预测对手运动。
您可以使用空间的向量表示。因此,从A的角度来看,BA将代表A和B之间的向量。然后,您可以添加B单元速度的向量BV。最终的向量将是b和bvp之间的向量,将来在某个时候b的预测位置。至于移动计算,您还需要考虑A。