流場,一般為網格圖,網格中的每乙個節點包含乙個向量,該向量是物體在該位置時期望的速度。
利用流場的速度資訊指導大量物體同時進行尋路。換句話說,如何生成可以尋路的流場,才是問題的關鍵。
這裡有一篇英文的文章和乙個示例[3],閱讀文章有助理解流場尋路,英文不夠好的同學也可以從例子中獲取感性的認識。
流場尋路
流場的簡單生成:
流場根據迪傑斯特拉圖生成的,而迪傑斯特拉圖是依據眾多智慧型移動體共同目的地以及節點運動消耗圖生成。
節點運動消耗圖,用0表示可正常通過,用極大值表示障礙物,用其他值表示河水,沼澤,斜坡,樹林等地形資訊。
首先,需要依據節點運動消耗圖以及眾多智慧型移動體共同目的地生成迪傑斯特拉圖。
迪傑斯特拉圖中的每一節點包含其距離目的地節點的最少運動消耗。
細節就是以目的地為起點進行迪傑斯特拉演算法搜尋到圖中其他所有節點的最短運動消耗,其他非目的地節點儲存這到目的節點的最短運動消耗。
什麼迪傑斯特拉演算法,請參看。
迪傑斯特拉演算法
需要注意的是,本文中的例子生成的迪傑斯特拉圖,其實使用廣度優先演算法生成的,這是因為邊權值全部為1(路徑消耗均為1)。
其次,依據迪解釋特拉圖生成流場。流場每乙個節點包含乙個指向某個鄰居節點的向量,並且該向量所指向的鄰居節點,在所有鄰居節點中其距離目的路徑消耗最少。而向量的大小可以為移動智慧型體的最大速率,或者單位化。
當位於流場某一位置時,如何選取對應的速度向量,可以使用簡單的歸整法獲取速度向量。 也可以採用雙線性內插法依據上下左右其他四個節點值來計算[1]。
什麼是線性內插?請參看線性內插
流場的生成的速度向量不一定完全最佳,可以使用一些修正演算法,比如視線修正法[2],來適當的調節速度向量的方向。
流場可以和其他行為結合起來,實現更複雜的組合操控行為。例如,流場+群聚(分離,聚集,對齊)。這一點在game ai pro - efficient crowd simulation for mobile games給出了具體的實現思路。
「最高指揮官2」和「堅守陣地2」這兩款遊戲肯定是用了流場尋路。最近比較火的「皇室戰爭」也可能使用流場尋路(當然我猜的)。其實,流場尋路適合兩種型別的遊戲rts和moba(即時戰略和塔防),說白了最適合大量智慧型運動物體擁有共同目的地尋路。
參考文獻:
[1]graham pentheny,game ai pro : efficient crowd simulation for mobile games
[2]elijah emerson,game ai pro :crowd pathfinding and steering using flow field tiles
[3][4]mat buckland,遊戲人工智慧程式設計案例精粹
[5]daniel shiffman,**本色-用程式設計模擬自然
遊戲開發中的人工智慧
今天非常開心,cocos官方直播居然在幾千人中中獎,可以買彩票了。言歸正傳,所謂的人工智慧,也就是大家常說的ai artificial intelligence 一說到ai可能就會讓人覺得比較深奧,其實也就是非玩家角色思考和行為的綜合。比如,在什麼樣的條件下,觸發什麼樣的行為。其實我們在遊戲開發中的...
遊戲程式設計中的人工智慧 補
先抱怨下windows 64bit下的交叉編譯簡直折磨死人,倒騰了幾天之後決定還是切到linux下算了。虛擬機器雖然不給力,但是好歹能看出來優化後的結果。本文沒什麼講的,只是將上文說到的掃雷機的進化過程中耗時最長的函式用c重新寫一遍後比較下執行速度,廢話不多說,直接貼 看結果。原來判斷兩條直線ab和...
人工智慧演算法在遊戲中演示
人工智慧是乙個非常具有潛力的分支,顧名思義,它可以通過計算機指令模擬人的行為,在遊戲中的人工智慧就非常地多樣了。對於fps tab rpg stg adv等遊戲,有著不同的人工智慧,但都基於幾種理論 有限狀態機 遺傳演算法 神經網路等。下面我就採用遊戲中最基礎也是最常用的人工智慧演算法來進行演示。我...