行为树
行為樹常被用來實現游戲中的AI。每次執行AI,都會從根節點遍歷整個樹,父節點執行子節點,子節點執行完后將結果返回父節點。下面是基本的四個節點:
1 *順序節點(Sequence):屬于組合節點,順序執行子節點,只要碰到一個子節點返回false,則返回false,否則返回true,類似于程序中的邏輯與。
2 *選擇節點(Selector):屬于組合節點,順序執行子節點,只要碰到一個子節點返回true,則返回true,否則返回false,類似于程序中的邏輯或。
3 *條件節點(Condition):屬于葉子節點,判斷條件是否成立。
4 *執行節點(Action):屬于葉子節點,執行動作,一般返回true。
關于更多關于行為樹概念上的東西,大家很容易找到相關的資料,這里不再最贅述,主要是通過一個實際的例子來看行為樹在AI上的應用。
這是AI文字表達的方式:
如果不是情人節,我們的Avatar將去球場打球,如果是情人節,他將帶上一束花去見他的女友,但是他可能沒帶錢,所以他要先回家拿錢,然后去花店買花,再去
見他的女友,如果女友還在約會地點,則將花送給女友。
下面是用行為樹表達的方式:
上面的圖讓我們能很容易指導我們的代碼編寫,我們需要完成所有的葉子節點,然后將他們按照圖示,放到相應的組合節點中去,然后不停的遍歷整個行為樹。
我使用AS3完成了下面的demo,去實現上圖中的行為樹AI(如無法觀看請下載最新的FlashPlayer)。
在Flash中,藍色的圓表示AI控制的Avatar,你可以通過點擊不同選擇框來改變當前的條件,Avatar會根據條件做出不同的反應。
行為樹很適合做AI編輯器,我們定義好一些條件和動作,策劃人員通過簡單的拖拽和設置即可實現復雜的游戲AI。
總結
- 上一篇: TypeScript里get属性的实现
- 下一篇: SAP Spartacus OccEnd