Summary of the tutorials
- Summary of the tutorials [教程总结]
- T.1: Create your first Behavior Tree [创建您的第一个行为树]
- T.2: Parametrize a Node with Ports [使用端口参数化节点]
- T.3: Generic and type-safe Ports [通用和类型安全的端口]
- T.4: Difference between Sequence and ReactiveSequence [Sequence 和 ReactiveSequence 的区别]
- T.5: How to reuse entire SubTrees [如何重用整个子树]
- T.6: Remapping of Ports between SubTrees and their parents [子树与其父级之间端口的重新映射]
- T.7: How to wrap legacy code in a non intrusive way [如何以非侵入性方式包装遗留代码]
- T.8: Passing arguments to Nodes without Ports [将参数传递给没有端口的节点]
- T.9: Asynchronous actions with Coroutines [使用协程的异步操作]
翻译自:https://www.behaviortree.dev
Summary of the tutorials [教程总结]
T.1: Create your first Behavior Tree [创建您的第一个行为树]
This tutorial demonstrates how to create custom ActionNodes
in C++ and
how to compose them into Trees using the XML language. [本教程演示如何在 C++ 中创建自定义动作节点,以及如何使用 XML 语言将它们组合成树。]
T.2: Parametrize a Node with Ports [使用端口参数化节点]
TreeNodes can have both Inputs and Outputs Ports.
This tutorial demonstrates how to use ports to create parametrized Nodes. [TreeNode 可以同时具有输入和输出端口。本教程演示如何使用端口创建参数化节点。]
T.3: Generic and type-safe Ports [通用和类型安全的端口]
This tutorial is an extension of the previous one. [本教程是上一教程的扩展。]
It shows how to create and use ports with generic and user-defined
types. [它展示了如何创建和使用具有通用和用户定义类型的端口。]
T.4: Difference between Sequence and ReactiveSequence [Sequence 和 ReactiveSequence 的区别]
Reactive ControlNodes can be a very powerful tool to create sophisticated
behaviors. [反应式控制节点可以成为创建复杂行为的非常强大的工具。]
This example shows the difference between a standard Sequence and a Reactive one. [这个例子展示了标准序列和反应序列之间的区别。]
T.5: How to reuse entire SubTrees [如何重用整个子树]
Reusability and Composability can be done at the level of a single Node,
but also with entire Trees, which can become SubTrees of a “parent” Tree. [可重用性和可组合性可以在单个节点的级别上完成,也可以在整个树上完成,它们可以成为“父”树的子树。]
In this tutorial we will also introduce the builtin Loggers. [在本教程中,我们还将介绍内置的 Loggers。]
T.6: Remapping of Ports between SubTrees and their parents [子树与其父级之间端口的重新映射]
Any Tree/SubTree in the system has its own isolated BlackBoard. [系统中的任何树/子树都有自己独立的黑板。]
In this tutorial we extend the concept or Ports to SubTrees, using
port remapping. [在本教程中,我们使用端口重映射将概念或端口扩展到子树。]
T.7: How to wrap legacy code in a non intrusive way [如何以非侵入性方式包装遗留代码]
This tutorial shows one of the many possible ways to wrap an existing code
into the BehavioTree.CPP
infrastructure. [本教程展示了将现有代码包装到 BehavioTree.CPP 基础架构中的多种可能方法之一。]
T.8: Passing arguments to Nodes without Ports [将参数传递给没有端口的节点]
If your custom Node has a lot of ports, it is probably a sign that you didn’t
understand the problem that Ports are supposed to solve 😉 [如果您的自定义节点有很多端口,则可能表明您不了解端口应该解决的问题;)]
In this tutorial, we show how to pass arguments to a custom Node class without
polluting your interfaces with pointless Input Ports. [在本教程中,我们将展示如何将参数传递给自定义 Node 类,而不会用无意义的输入端口污染您的接口。]
T.9: Asynchronous actions with Coroutines [使用协程的异步操作]
Coroutines are a powerful tool to create asynchronous code. [协程是创建异步代码的强大工具。]
In this tutorial, we outline the typical design pattern to use when you
implement an asynchronous Action using CoroActionNode
. [在本教程中,我们概述了使用 CoroActionNode 实现异步操作时使用的典型设计模式。]