我当前的游戏开发爱好有一个问题。我有两个单位,它们在二维空间中是敌对的。一个人直接向对手射击,所以如果他移动,就会打偏。但另一个应该预测对手的 Action 并“向前”射击。
假设第一个单元是 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)当你站立不动时预测对手的 Action 。
b)当你移动时预测对手的移动。
您可以使用空间的 vector 表示。所以 BA 代表从 A 的角度来看 A 和 B 之间的 vector 。然后您可以添加单元 B 的速度 vector Bv。所得 vector 将是 B 和 Bvp 之间的 vector ,即 B 在未来某个时间 t 的预测位置。对于移动计算,您还需要考虑 A 的移动 vector 。
我是一名优秀的程序员,十分优秀!