2011-09-01 46 views
4

我正在研究架空射擊遊戲,隨着時間的推移,隨着時間的推移,當我在場館周圍移動時,敵人將開始堆疊在每個頂部除非他們是一個巨大的單位。它最終看起來很愚蠢。人工智能非常簡單和基本:找到玩家,向他移動,如果他在範圍內攻擊他。防止實體在架空射擊遊戲中疊加在海誓山盟上

推動他們離開對方的最佳方式是什麼,以便他們不會都在同一個地方結束?我認爲植絨有點矯枉過正(可能過於密集,因爲我一次在屏幕上會有100-200個敵人)。

想法?

謝謝!

回答

9

以下是你可以採取解決這個問題的幾個不同的方法:

  1. 你可以定義一個勢場爲每一個「高度」或「壞」到每個位置上的關聯單位地圖。每個單位的移動方式都是儘量減少其潛力,可能是朝着將其移至最低潛力的方向邁出一步,可以一步到位。你可以定義潛在的功能,使其向玩家傾斜,使所有單位試圖移動到玩家,但也是在現有單位周圍非常高,導致單位避免相互碰撞。這是一個非常強大的框架,在AI中一直被利用;其中一個着名的例子就是其用於星際爭霸的Berkeley Overmind AI,後者最終贏得了AI星際爭霸比賽。如果你採用這種方法,你可能會調整潛在的功能來讓AI以許多其他有趣的方式行事,並且可以輕鬆地支持植絨。我個人認爲這是最好的方法,因爲它是最靈活的。對於更先進的尋路模型來說,這也是一個很好的起點。對於非常有用關於AI潛在領域的很好和實用的介紹,請查看this website。要對潛在領域及其應用進行嚴格的數學介紹,您可能需要查看this paper使用潛在領域調查不同的AI方法。

  2. 如果您爲每個敵人定義了一個邊界圓,您可以通過防止任何兩個單位在彼此的兩個半徑範圍內明確禁止單位彼此堆疊。任何時候兩個單位離得太近,你都可以阻止他們中的一個移動,或者讓他們互相施加力量將它們分開。當兩個單位相互碰撞時,你可以選擇一個隨機力矢量應用於每個單位,試圖將它們分開。這是一個比潛在的領域更加黑客和不太優雅的解決方案,但是如果您需要啓動並運行它,那絕對是一個可行的選擇。

  3. 你可以選擇單位周圍玩家的一組點,然後讓每個單位隨機選擇一個移動到的目標點。這會導致單位在玩家周圍環形(或任何你想要的形狀)上散佈得更薄,避免你目前看到的巨大羣衆。再說一遍,這比使用潛在字段不太優雅,但如果你的目標是快速開展工作,那麼這是另一個可以嘗試的快速入門。

希望這有助於!

+0

+1;很好的選擇,優先答案,援引參考(第一選項)。 –

+0

感謝您的答案 - 我有一些閱讀要做! –

+0

+1爲非常好的答案。我們使用了選項3的變體,用於我們的競技場射擊遊戲Square Off。敵人週期性地重新計算他​​們的方向,通常朝向玩家(如果他們是可見的)或朝向AI節點(如果玩家不可見)。在那一點上,我們簡單地增加了一個隨機的速度垂直於他們的方向。這導致敵人通常向玩家移動,但避免了令人討厭的聚集。是的,這是一個黑客攻擊,但它是超級簡單而高效的CPU。 – Aranda

相關問題