2014-04-03 39 views
0

在我用C#XNA編程的小型自上而下的可怕驢子外國人遊戲中,我有一些外星人和一些圍牆(等等)。我無法弄清楚的一件事是我怎樣才能引導外星人的圍牆。目前,他們像白癡一樣陷入他們的身邊,一邊滑動一邊,如果他們把另一邊戳出來,可能會達到他們的目標。XNA - 圍繞牆壁轉向

這裏是我的問題的專業說明: problem http://imageshack.com/a/img829/6545/wsf4.jpg

那麼直接,我的問題是:

  1. 我如何檢查是否有外星人和目標之間的牆?
  2. 我如何引導他們沿着最短的路線?

算法/解釋welcome,c#獎勵! :)

一些相同的假設,希望能夠便於計算: - 外星人,牆壁AABB - 牆壁總是垂直或水平

,我hapy如果必要的話:)

提供任何其他信息
+0

搜索「A * pathfinding unity」。當我在Google上輸入時,第一個結果似乎很有希望。 –

+0

@ChrisDunaway我的遊戲是連續的,而不是基於網格。這種解決方案意味着我不得不爲了這個算法而在我的世界上建立一個網格?如果是這樣,我可以簡單地使用vector2的座標作爲細網格嗎?如果不是,網格應該有多寬? – IamPancakeMan

+0

您可以在想要轉向的地方定義自己的航點(許多大型遊戲使用區域而不是點數)。使用A *算法,您將連接點/區域爲您的播放器創建路徑。您可以通過檢查您是否實際上與原始直線路徑中的牆壁發生碰撞來分割A *路徑查找和常規移動之間的功能(我沒有這樣做,但我建議使用「光線跟蹤」)。因此,如果您檢測到從玩家位置到目標位置的碰撞,請使用A *查找最佳路徑,否則您只需朝該位置行走。 –

回答

1

當我開始研究我開發的wp7/wp8遊戲時,我用A *尋路解決了這類問題。 (www.policyalmanac.org/games/aStarTutorial.htm)。

您也可以使用Dijkstra算法進行尋路。 http://i.stack.imgur.com/VMkdl.gif

這是我的第一個方法。從那以後,我學到了一種不同的方式來接近它。這建立在A *尋路上,並利用AI Steering力/行爲。你甚至可以通過轉向力量來解決這個問題。

指導力量,只是迫使一個實體根據其目標和環境而移動。將運動(速度)力疊加到實體上,並且這些力的總和以期望的方式移動實體。

所以一個實體可能有移動的願望,朝着你的怪物移動,避開牆壁,避開地圖的邊界。這些速度乘以%值(你希望它們應用於全球力量的多少)全部加在一起給你最後的力量。

所有這些單獨有問題和限制。我認爲A *和轉向力量的組合對你來說可能是最好的。

例如:http://i.stack.imgur.com/u7ECs.jpg'

編輯:Dijkstra的是基於,如果你想手動放置節點的更多節點。如果放置節點不是一種選擇,我相信轉向力量是你最好的選擇。

+0

哈!我記得在決策數學中dij-cantpronounceit-ra的algorythm。那些簡單的日子...... 所以這聽起來像是我需要遍佈整個地方的節點用於我使用的任何算法。我可以想象dij-cantpronounceit-ra的algorythm會是什麼樣子,所以我可能會這樣做。謝謝 :) – IamPancakeMan