news 2026/6/23 23:25:46

教程12:并行节点的使用-–-behaviac

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
教程12:并行节点的使用-–-behaviac

原文

本文档描述的是3.6.34及以后版本,对于3.5及以前的老版本请参考分类“3.5”。

并行节点用于一般意义上并行的执行所有子节点,相关的功能和属性说明详见手册《并行节点》。

并行节点容易在其属性配置上产生误用,本文将结合行为树中对并行节点的实际使用来加以说明。

1. 首先创建Agent子类“FirstAgent”及其成员属性p1和成员方法Say(behaviac::string& value, bool isLatent),Say()方法用于打印指定的参数,如下图所示:

Say()方法表示对于isLatent为真的情况,在第三帧后返回成功,前两帧返回正在执行;而对于isLatent为假的情况,在第一帧就直接返回成功,其实现代码如下所示:

behaviac::EBTStatusFirstAgent::Say(behaviac::string&value,boolisLatent){///<<< BEGIN WRITING YOUR CODE Sayif(isLatent&&behaviac::Workspace::GetInstance()->GetFrameSinceStartup()<3){printf("\n%s [Running]\n\n",value.c_str());returnbehaviac::BT_RUNNING;}printf("\n%s [Success]\n\n",value.c_str());returnbehaviac::BT_SUCCESS;///<<< END WRITING YOUR CODE}

其中,当前帧数在主循环代码中每帧进行累加,如下代码所示:

voidUpdateLoop(){LOGI("UpdateLoop\n");behaviac::Workspace::GetInstance()->SetFrameSinceStartup(0);behaviac::EBTStatus status=behaviac::BT_RUNNING;while(status==behaviac::BT_RUNNING){behaviac::Workspace::GetInstance()->SetFrameSinceStartup(behaviac::Workspace::GetInstance()->GetFrameSinceStartup()+1);LOGI("frame %d\n",behaviac::Workspace::GetInstance()->GetFrameSinceStartup());status=g_FirstAgent->btexec();}}

2. 创建行为树“ParallelBT”,其中并行节点有3个子节点,第一个是条件节点,第二和三个都是动作节点,如下图所示:

3. 该并行节点的的属性默认配置如下图所示:

  • **失败条件:**FAIL_ON_ONE表示一个子节点返回失败,那么并行节点就返回失败。
  • **成功条件:**SUCCEED_ON_ALL表示所有子节点都返回成功,并行节点才返回成功。这里需要注意,失败条件优先于成功条件。
  • **子节点结束继续条件:**CHILDFINISH_LOOP表示子节点结束后会重新再循环执行。
  • **退出行为:**EXIT_ABORT_RUNNINGSIBLINGS表示当并行节点的成功或失败条件满足并返回成功或失败后,会终止掉其他还在运行的子节点。

4. 执行该行为树,结果如下图所示:

5. 将并行节点的属性“子节点结束继续条件”改为CHILDFINISH_ONCE,表示子节点结束后不再执行(除非重入该并行节点),如下图所示:

6. 再执行该行为树,结果如下图所示:

从上图可以看到,虽然一共循环了3次,但ID为7的动作节点只执行了一次,而ID为0的动作节点由于前两帧执行时返回Running,得到持续执行,直到第三帧返回Success或Failure。

7. 将并行节点的属性“失败条件”改为FAIL_ON_ALL,并将“成功条件”改为SUCCEED_ON_ONE,如下图所示:

8. 再执行该行为树,结果如下图所示:

从上图可以看到,一共循环了1次,并行节点的所有子节点也都执行了1次。

本教程相关的工作区和代码工程详见源码包的目录tutorials/tutorial_12。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 0:03:50

Windows 7系统下Umi-OCR兼容方案:让老旧设备也能高效文字识别

Windows 7系统下Umi-OCR兼容方案&#xff1a;让老旧设备也能高效文字识别 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件&#xff0c;适用于Windows系统&#xff0c;支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.c…

作者头像 李华
网站建设 2026/6/23 17:21:06

联想拯救者工具箱完整指南:解锁硬件潜能的一站式解决方案

联想拯救者工具箱完整指南&#xff1a;解锁硬件潜能的一站式解决方案 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 联想拯…

作者头像 李华
网站建设 2026/6/23 17:22:23

暗黑3终极自动化辅助工具完整使用指南

暗黑3终极自动化辅助工具完整使用指南 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3keyHelper是一款专为《暗黑破坏神3》玩家设计的自动化辅助工…

作者头像 李华
网站建设 2026/6/23 19:33:33

网易云音乐扩展引擎:开启个性化音频体验新篇章

在数字音乐时代&#xff0c;用户对播放器个性化功能的需求日益增长。传统的插件安装方式往往需要复杂的手动操作&#xff0c;让许多用户望而却步。现在&#xff0c;一款名为BetterNCM Installer的工具应运而生&#xff0c;彻底改变了这一局面。 【免费下载链接】BetterNCM-Inst…

作者头像 李华
网站建设 2026/6/23 18:10:59

【有手就行】LoRA:用你自己的数据来微调大模型,让大模型真正懂你

一、前言 上上周的周末无事在家&#xff0c;然后写了一篇《【有手就行】自己花20分钟从0开始训练一个“大模型”》&#xff0c;结果发现这两个星期涨了几十个关注&#xff0c;比我前面写了几个月文章得到的关注还多&#xff0c;看来这种浅显易懂的、入门级的技术文章相对来说会…

作者头像 李华
网站建设 2026/6/23 11:23:06

TouchGAL社区搭建完全指南:从零开始构建专属Galgame交流平台

TouchGAL社区搭建完全指南&#xff1a;从零开始构建专属Galgame交流平台 【免费下载链接】kun-touchgal-next TouchGAL是立足于分享快乐的一站式Galgame文化社区, 为Gal爱好者提供一片净土! 项目地址: https://gitcode.com/gh_mirrors/ku/kun-touchgal-next 想要打造一个…

作者头像 李华