2016-04-27 51 views
3

我在這個遊戲中創建了一個網格中的遊戲(如國際象棋,x/y座標),有一些射擊必須擊中移動目標。如何計算彈丸撞擊移動目標的協調位置?

移動目標沿着由X步/ X座標組成的路徑(通過A *路徑查找獲得)。子彈不會沿着路徑行進,他們直接從發送者到達目標。

我想計算了拋射命中目標的座標(根據他的路徑)

我試圖用:2d game : fire at a moving target by predicting intersection of projectile and unit但如果炮彈在目標依次飛過這個算法是行不通的。

你能幫我解決這個算法嗎?

作爲輸入我有:

  • 目標路徑的每個步驟的Cordinates
  • 速度目標&彈丸
  • 實際X/Y目標位置(它可以是一個浮動如x:7.61 ,Y:如果需要5.22)
  • 位置拋射發件人

你可以認爲:

  • 炮彈在目標永遠不會改變他的路飛
  • 如果目標不動,速度等於0
  • 如果需要

感謝拋射開始可以被延遲任何幫助!

回答

2

你快到了。

用對象到達那裏的時間(應該是長度/速度)註釋對象路徑中的每一步。

接下來獲取路徑的每一段,並假設目標只沿該段移動,並使用找到的答案找出它會相交的地方。有3個選項。

  1. 你在段內的某個地方點擊目標。這是您正在尋找的解決方案。
  2. 您會在細分結束後點擊目標。這意味着你太遙遠了,所以你不能在目標旅行的時候碰到目標。您需要嘗試路徑的下一部分。
  3. 您會在細分的起始點之前點擊目標。這意味着該部分相對較近,您應該可以在任何需要的時間點擊目標。您可以決定這是一個解決方案,併爲您的鏡頭添加一些延遲,以便目標位於細分區域內,或嘗試上一個細分區域。

鑑於上述情況,我將從目標路徑的第一部分開始。如果你不能在那裏擊中目標,請嘗試下一個目標,直到你找到一個可以擊中目標的目標爲止。這將是目標在範圍內的第一個位置,所以鏡頭應該沒有延遲。

+0

謝謝!看起來不錯,現在,我需要一些時間來實現它;) – CyrilleGuimezanes

+0

在帖子我鏈接我沒有使用接受的答案(這是在我的opignon沒有很好解釋...)是有可能使用你的答案與http ://stackoverflow.com/a/3487761/1319359(我鏈接問題的另一個答案)? – CyrilleGuimezanes

+0

@CyrilleGuimezanes是的,那會。仔細檢查角落案例的處理(例如,射彈太慢而無法到達目標,或者當解決方案非常接近片段末尾時如何進行比較)。 – Sorin

1

算法1:調整發射時間

  1. 計算目標是否在一條直線上移動從發送者直接遠才能夠把射彈的時間。

  2. 計算該時間量過去後目標的位置。

  3. 計算彈丸到達該點的距離和時間。

  4. 適當延遲發射。

缺點:如果目標正在朝發送方直線移動並且初始距離很大,那麼此算法可能會導致很長的延遲。

如果延遲太大,您可能需要重新計算,並使用較早的罷工時間。

算法2:調整彈丸速度

  1. 使用您鏈接找到罷工時間的算法。

  2. 計算當時目標的位置。

  3. 設定發射速度,使其在與目標同時達到發射點。射彈速度應該在發射時確定。

缺點:如果目標立即轉向或離開發送者,那麼拋射物可能會有明顯不同於正常速度的速度。

我更喜歡算法2。我認爲玩家會意識到彈丸立即開始跋涉。如果使用算法1,遊戲可能看起來沒有反應。我認爲偶爾的緩慢/快速射彈不會打擾玩家。