2013-03-05 61 views
0

我目前正在編程一個塔防,導彈往往會錯過敵人,而不是像他們在桌面塔防中那樣跟着/擊中他們。這是因爲他們在沒有給敵人任何領先的情況下射擊,所以當敵人到達敵人位置時,敵人已經離開3-5個像素。我查了一下如何解決這個問題,發現我需要使用向量數學來解決問題。例如,這個網站http://www.helixsoft.nl/articles/circle/sincos.htm有一些如何編寫自導導彈的代碼,但我不確定這是否是我需要解決我的問題的那種數學。如何正確編程導彈尋路?

看起來像是在stackoverflow上的帖子推薦一些叫做「命令指導」的東西,但不知道如何與2D遊戲一起工作。

所以目前,我很困惑,該怎麼做。任何方向/指導將不勝感激。

回答

1

這聽起來像你已經有了代碼,如果它們是靜止的,它們會正確地擊中敵人,並且只有在導彈在飛行中它們移動的事實是問題。

爲什麼不在每當敵人邁出一步,或每隔10個像素左右導彈移動時,簡單地將導彈從其當前位置「重新啓動」到敵人的新位置。

這將導致導彈對敵方飛行進行「歸位」,而不是預測導彈到達時敵人的位置。

不同之處在於,「歸巢」應該會導致每一次擊中,而預測方法將允許敵人通過在導彈飛行時切換行走方向來躲避導彈。你更喜歡哪一個是設計決定,但我認爲通常的塔防遊戲使用歸位方法。

1

該文章正是你所需要的,閱讀導彈回歸部分,並使用反正切函數。

+0

我不明白該函數如何增加導彈的x和y位置。 x + =長度* fcos(角度)和y + =長度* fsin(角度)如何增加x位置和y位置?對我來說沒有多大意義。基本上,我需要導彈位置來增加每個刻度,而我只是不確定長度* fsin(角度)= y的移動距離和長度* fcost(角度)= x的移動距離。 – GayLord 2013-03-05 22:54:18

+0

我真的很推薦閱讀整篇文章和實例 - 這些問題和解決方案在遊戲開發中一次又一次地出現。 – 2013-03-05 23:20:29

+0

簡而言之,cos(角度)返回敵人在x方向上的距離,sin(角度)返回敵人在y方向上的距離。 cos(角度)和sin(角度)都返回範圍[0,1]中的值,因此需要乘以速度。 – 2013-03-05 23:22:23

1

你需要「預測」你的敵人的方向。假設它沿着一條直線移動,需要觀察它的速度和方向目標

比方說,你的塔是在點(0,0),你收集你的目標的兩點看法:在t=1

  • (100,100)t=0
  • (90,95)

速度:首先計算這兩個點之間的距離:

d = sqrt((x2-x1)^2 + (y2 - y1)^2) = 
    = sqrt(10^2 + 5^2) = sqrt(125) = 11.18034 

所以你的目標速度爲11.18034(因爲你拿了觀察在間隔相當於一個時間單位)

角度:幾何形狀的位。軌跡的斜率是:

m = (y2 - y1)/(x2 - x1) = 
    = 5/10 = 0.5 

所以角度:

theta = arctan(0.5) = 0.463648 radians (or 26.56 degrees) 

連得兩分和斜率,你可以估算你的目標的軌跡:

y - y1 = m * (x - x1) 
==> y = 0.5 * (x - 100) + 100 = 
     = 0.5 * x + 50 

所有剩下的就是計算你的導彈可以攔截目標的點。爲此,您需要知道導彈的速度,然後計算「最佳」攔截點。我會把第二步留給你。這是簡單的幾何(和一點創意)