Behavior Tree 用 Lua 實現一個最簡行為樹
阿新 • • 發佈:2017-06-23
urn ret pri end put true for 行為樹 一個
1 local SELECTOR = 1 2 local SEQUENCE = 2 3 local CONDITION = 3 4 local ACTION = 4 5 6 local function Traverse(node, ...) 7 local t = node.type 8 if t == SELECTOR then 9 for i=1, #node do 10 if Traverse(node[i], ...) then 11 return true 12 end13 end 14 return false 15 elseif t == SEQUENCE then 16 for i=1, #node do 17 if not Traverse(node[i], ...) then 18 return false 19 end 20 end 21 return true 22 elseif t == CONDITION then 23 for i=1, #node do24 if not node[i](...) then 25 return false 26 end 27 end 28 return true 29 elseif t == ACTION then 30 for i=1, #node do 31 node[i](...) 32 end 33 return true 34 end 35 end 36 37 local root = 38 { 39type = SELECTOR, 40 { 41 type = SEQUENCE, 42 { 43 type = CONDITION, 44 function(i,j) return math.random() > i end, 45 function(i,j) return math.random() < j end, 46 }, 47 { 48 type = ACTION, 49 function() print("random") end, 50 }, 51 }, 52 { 53 type = ACTION, 54 function() print("idle") end, 55 }, 56 } 57 58 local input1 = 0.2 59 local input2 = 0.7 60 Traverse(root, input1, input2)
有沒有比 C++ 代碼簡單一萬倍,有沒有?
Behavior Tree 用 Lua 實現一個最簡行為樹