开始Getting started
BehaviorTree.CPP CPP是一个C++库,可以轻松集成到您喜爱的分布式中间件中,如ROS或SmartSoft。
您可以将其静态链接到应用程序中(例如游戏)。
这些是你首先需要理解的主要概念
【原英文链接】Getting started - BehaviorTree.CPP
Nodes vs Trees
用户必须创建自己的ActionNode和ConditionNode(LeafNode);这个库可以帮助您轻松地将它们组合成树。
将LeafNode视为组成复杂系统所需的构建块。
根据定义,您的自定义节点是(或应该是)高度可重用的。但是,在开始时,可能需要一些包装接口来调整旧的代码(指没有用行为树之前的代码)。
The tick() callbacks
任何TreeNode都可以看作是调用回调的机制,什么时候运行代码取决于设置的tick 回调。
在下面的大多数教程中,我们的Actions将简单地在控制台上打印消息或休眠一定时间来模拟长时间的计算。
在生产代码中,特别是在模型驱动开发和基于组件的软件工程中,操作/条件(Action/Condition) 可能会与系统的其他组件或服务通信。
Inheritance vs dependency injection.继承和包装器
要创建自定义TreeNode,您应该从适当的类继承。
例如,要创建自己的同步Action,应该从类SyncActionNode继承。
或者,库提供了一种机制来创建TreeNode,将函数指针传递给包装器(依赖注入)。
这种方法减少了代码中样板文件的数量;
Dataflow, Ports and Blackboard数据流、端口和黑板
端口将在后面中详细解释。
目前,重要的是要知道:
黑板是树的所有节点共享的键/值(key/value)存储。
端口是节点之间可以用来交换信息的机制。
使用黑板上的相同键(key)“连接”端口。
编译时(C++)必须知道节点的端口数、名称和类型;端口之间的连接在部署时完成(XML)。
使用XML格式在运行时加载树
可以使用xml来加载树,在程序刚开始运行的时候
【说明】
BehaviorTree.CPP行为树学习系列是翻译自源英文网站,由于个人知识能力水平有限,如有错误的地方,请在评论区留言,会不断修改和完善的