BehaviorTree.CPP是一个C ++库,可以轻松集成到您喜欢的分布式中间件中,例如ROS或SmartSoft。
您还可以将其静态链接到您的应用程序(例如游戏)。
您需要先了解一些主要概念。
节点VS树
用户必须创建自己的ActionNodes和ConditionNodes(LeafNodes),这个库可以帮助您轻松地将它们组合成树。
将LeafNodes视为构建复杂系统所需的构建块。
根据定义,您的自定义节点是(或应该)高度可重用的。因此,一开始可能需要一些包装接口来调整遗传代码。
tick()回调
任何TreeNode都可以看作是一种调用回调的机制,即 运行一段代码。这个回调的作用取决于你。
在以下大多数示例中,我们的动作仅在休眠屏幕上打印消息一段时间以模拟长时间计算。
继承VS依赖注入
要创建自定义TreeNode,您应该从适当的类继承。
例如,要创建自己的同步Action,您应该从类SyncActionNode继承。
或者,我们提供了一种机制来创建TreeNode,将 函数指针传递给包装器(依赖注入)。
这种方法减少了代码中样板的数量; 作为参考,请查看第一个教程和描述非侵入式与遗传代码集成的教程。
NodeParameters
NodeParameters在概念上类似于函数的参数。
它们在实例化树时静态传递。
它们表示为键/值对的列表,其中键和值都是字符串。
这并不奇怪,因为NodeParameters通常是从文件中解析的。
该库提供了一些方法和实用程序函数,可以将值从字符串正确转换为所需的C ++类型。
使用XML格式在运行时加载树
尽管库是用C ++编写的,但树本身可以在运行时组合,从文件中读取树结构。
这里详细描述了XML格式。