最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C++實(shí)現(xiàn)行為樹(shù)

2023-02-23 22:06 作者:xhy2023  | 我要投稿

基本概念

行為樹(shù),英文是Behavior Tree,簡(jiǎn)稱BT,是由行為節(jié)點(diǎn)組成的樹(shù)狀結(jié)構(gòu),每個(gè)節(jié)點(diǎn)的執(zhí)行都有一個(gè)結(jié)果(成功Success,失敗Failure或運(yùn)行Running)。節(jié)點(diǎn)從結(jié)構(gòu)上分為兩類:組合節(jié)點(diǎn)、葉節(jié)點(diǎn),組合節(jié)點(diǎn)才有子節(jié)點(diǎn),即出度可以大于0的節(jié)點(diǎn),葉節(jié)點(diǎn)一般用來(lái)放置執(zhí)行邏輯和條件判斷。

  1. 序列(Sequence)節(jié)點(diǎn):組合結(jié)點(diǎn),順序執(zhí)行所有子節(jié)點(diǎn),如果子節(jié)點(diǎn)全部執(zhí)行成功,返回成功。如果某個(gè)子節(jié)點(diǎn)失敗則返回失敗,且不再執(zhí)行下一個(gè)子節(jié)點(diǎn)。

  2. 選擇(Selector)結(jié)點(diǎn):組合結(jié)點(diǎn),順序執(zhí)行所有子節(jié)點(diǎn),只要碰到一個(gè)子節(jié)點(diǎn)返回成功,則返回成功,否則繼續(xù)執(zhí)行下一個(gè)。如果子結(jié)點(diǎn)全都執(zhí)行失敗,則返回失敗。(每個(gè)節(jié)點(diǎn)是或關(guān)系)

  3. 并行(Parallel)結(jié)點(diǎn):組合結(jié)點(diǎn),并行其下所有子節(jié)點(diǎn),所有節(jié)點(diǎn)成功則返回成功(有任意子節(jié)點(diǎn)失敗則失?。?。(每個(gè)節(jié)點(diǎn)是與關(guān)系)

  4. 條件(Condition)節(jié)點(diǎn):葉子結(jié)點(diǎn),根據(jù)條件的比較結(jié)果,返回成功或失敗。

  5. 動(dòng)作(Action)節(jié)點(diǎn):葉子結(jié)點(diǎn),根據(jù)動(dòng)作結(jié)果返回成功,失敗,或運(yùn)行。

  6. 等待(Wait)節(jié)點(diǎn):葉子節(jié)點(diǎn),當(dāng)指定的時(shí)間過(guò)去后返回成功。

  7. 循環(huán)(Loop)節(jié)點(diǎn):葉子節(jié)點(diǎn),循環(huán)執(zhí)行子節(jié)點(diǎn)到指定次數(shù)后返回成功,如果循環(huán)次數(shù)為-1,則無(wú)限循環(huán)。

比如我們要實(shí)現(xiàn)這個(gè)行為:如果碰到主角,打招呼;否則,睡覺(jué)。

通過(guò)Json建立行為樹(shù)

輸入使用Json格式。Json整體是一個(gè)字典,value的類型有以下三種類型:

  1. 標(biāo)量(scalar):也就是一個(gè)單獨(dú)的字符串或數(shù)字。

  2. 序列(sequence):也就是若干個(gè)相關(guān)的數(shù)據(jù)按照一定順序并列在一起,又叫做數(shù)組(array)或列表(List)。

  3. 映射(mapping):也就是一個(gè)key/value對(duì),即字典。這個(gè)就是嵌套形式了,因?yàn)镴son本身就是一個(gè)字典,字典內(nèi)繼續(xù)包含字典。

Json的書(shū)寫規(guī)則如下:

  1. 并列的數(shù)據(jù)之間用逗號(hào)(",")分隔。

  2. 映射用冒號(hào)(":")表示。

  3. 并列數(shù)據(jù)的集合(數(shù)組)用方括號(hào)("[]")表示。

  4. 映射的集合(對(duì)象)用大括號(hào)("{}")表示。

下面舉一個(gè)由輸入Json來(lái)構(gòu)建行為樹(shù)的例子,每個(gè)字典就是一個(gè)節(jié)點(diǎn)(Node)。執(zhí)行效果是車輛先播放音樂(lè),然后右轉(zhuǎn),然后停下來(lái)。

1. 節(jié)點(diǎn)定義

1)btNode.h代碼

2)btNode.cpp代碼

2. 生成結(jié)點(diǎn)的工廠類實(shí)現(xiàn)

這里可以不需要用工廠類,因?yàn)槊總€(gè)實(shí)例工廠并沒(méi)有特別的流程,創(chuàng)建節(jié)點(diǎn)的方式都一樣,即包含兩步:1)new一個(gè)指定節(jié)點(diǎn)。2)加載json。但是使用工廠類可以更方便地管理所有的節(jié)點(diǎn)類型。

3. 組合結(jié)點(diǎn)類型

繼承BtNode,是組合結(jié)點(diǎn)類型的基類,如parallel、selector、sequence等需要繼承這個(gè)類,而葉子結(jié)點(diǎn)類型只需要繼承BtNode類。

1)BtGroupNode.h代碼

2)BtGroupNode.cpp代碼

4.?parallel并行節(jié)點(diǎn)

1)BtParallelNode.h代碼

2)BtParallelNode.cpp代碼

5. action動(dòng)作節(jié)點(diǎn)

1)BtActionNode.h代碼

2)BtActionNode.cpp代碼


C++實(shí)現(xiàn)行為樹(shù)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
潢川县| 连江县| 墨江| 阳江市| 苍溪县| 筠连县| 盐亭县| 牟定县| 龙州县| 自治县| 宾川县| 屯昌县| 桓仁| 桂林市| 弥渡县| 农安县| 崇文区| 旬邑县| 建始县| 吉林省| 宕昌县| 郁南县| 寿宁县| 宝坻区| 博白县| 泉州市| 日土县| 永嘉县| 林芝县| 凉山| 郯城县| 龙海市| 潞西市| 洛川县| 霍林郭勒市| 白城市| 盐津县| 北京市| 天气| 泰兴市| 荔浦县|