簡體   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