news 2026/6/15 3:45:49

Cplusplus运行时端的使用上手-–-behaviac

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cplusplus运行时端的使用上手-–-behaviac

原文

运行时(游戏)端使用行为树之前,需要确保行为树文件已经成功导出。

如何注册和导出类型信息请参考C++类型信息的注册和导出,如何导出行为树请参考导出和使用XML/BSON行为树。

通过编辑器导出行为树文件后,运行时端的执行主要分为三个部分:

  • 初始化
  • 循环更新
  • 清理

1 初始化

在游戏的初始化函数中,添加初始化behaviac组件所需的功能,例如注册Agent子类信息、设置行为树文件的加载路径和文件格式、创建Agent子类的实例、加载行为树并设置当前所需执行的行为树等。

如下代码所示:

boolInitBehavic(behaviac::Workspace::EFileFormat ff){behaviac::Config::SetSocketBlocking(false);behaviac::Config::SetSocketPort(8081);behaviac::Agent::Register<CBTPlayer>();behaviac::Workspace::GetInstance()->SetFilePath("../test/demo_running/behaviac/exported");behaviac::Workspace::GetInstance()->SetFileFormat(ff);behaviac::Workspace::GetInstance()->ExportMetas("../test/demo_running/behaviac/demo_running.xml");//behaviac::Agent::SetIdMask(kIdMask_Wolrd | kIdMask_Opponent);behaviac::Workspace::GetInstance()->SetDeltaFrames(1);returntrue;}boolInitPlayer(constchar*pszTreeName){g_player=behaviac::Agent::Create<CBTPlayer>();boolbRet=false;bRet=g_player->btload(pszTreeName);assert(bRet);g_player->btsetcurrent(pszTreeName);returnbRet;}
关于文件路径的说明
  • Workspace::SetFilePath指定的是编辑器中Workspace的导出路径,可以是绝对路径。当指定的是相对路径的时候,相对的是当前工作路径(一般都是运行程序所在目录)。
  • Agent::btload使用的文件名是相对于Workspace::SetFilePath指定的路径,没有扩展名,可以有目录结构的层次化文件名,如“node_test/selector_loop_ut_7”。在编辑器中打开某个行为树后,右键文件页选取“复制文件名”获取。

  • 例如:
    • 如果运行程序所在目录(或者VS里指定的工作路径$(TargetDir))是”D:\Test\bin”

    • Workspace::SetFilePath指定的相对路径是“…/behaviac/workspace/exported”

    • btload指定是“node_test/selector_loop_ut_7”

    • 则workspace的导出路径实际是“D:/Test/behaviac/workspace/exported”,

      而相应的导出行为树文件是“D:/Test/behaviac/workspace/exported/node_test/selector_loop_ut_7.xml”或

      “D:/Test/behaviac/workspace/exported/node_test/selector_loop_ut_7.bson.bytes”。

    • 具体是xml或bson则由Workspace::SetFileFormat确定。

    • 当指定格式是cpp或c#的时候,导出的行为树是cpp或c#源码,已经编译构建进可执行程序,Agent::btload指定的文件名(跟xml的用法一样,无需修改btload的参数)只是用来标识该行为树的,从而代码可以据此创建相应的行为树,不像xml或bson格式的时候需要加载数据文件。

  • 如果Agent::btload加载失败,请注意检查当前路径,Workspace::SetFilePath设定的导出路径,以及Agent::btload指定的文件标识。还可以在当前路径里检查log文件_behaviac_$_$_.log

2 循环更新

在游戏的主循环中,添加执行Agent实例的行为树相关代码,也即通过调用Agent类的接口btexec()或Workspace类的接口Update()来执行行为树。

这两种执行方式的区别,请参考更新流程。

如下代码样例所示:

voidUpdateLoop(){inti=0;intframes=0;behaviac::EBTStatus status=behaviac::BT_RUNNING;while(status==behaviac::BT_RUNNING){cout<<"frame "<<++frames<<std::endl;status=g_player->btexec();}}

3 清理

最后的清理过程,包括销毁Agent子类的实例,以及反注册Agent子类信息等。

如下代码样例所示:

voidCleanupPlayer(){behaviac::Agent::Destroy(g_player);}voidCleanupBehaviac(){behaviac::Agent::UnRegister<CBTPlayer>();behaviac::Workspace::GetInstance()->Cleanup();}

以上步骤的完整代码,请参考demo_running.cpp文件。

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

Wan2.2-T2V-A14B在STM32嵌入式平台上的可行性分析

Wan2.2-T2V-A14B在STM32嵌入式平台上的可行性分析 在智能设备不断向“看得懂、听得清、会生成”演进的今天&#xff0c;一个极具挑战性的问题浮出水面&#xff1a;我们能否让一台仅靠几节电池供电、主频不过480MHz的STM32微控制器&#xff0c;运行像Wan2.2-T2V-A14B这样动辄百亿…

作者头像 李华
网站建设 2026/6/15 13:56:49

百度经验分享:个人用户如何玩转Qwen-Image-Edit-2509

个人用户如何玩转 Qwen-Image-Edit-2509&#xff1a;从零开始的智能图像编辑实践 在电商页面上&#xff0c;一个服装品牌需要为同一件模特图展示十几种颜色搭配&#xff1b;社交媒体运营者凌晨赶工&#xff0c;只为把海报上的“双十一”改成“618大促”&#xff1b;普通用户想换…

作者头像 李华
网站建设 2026/6/15 14:12:53

Python企业数据资产登记系统_6op56dox_pycharm Vue django flask项目源码

目录已开发项目效果实现截图关于我系统介绍开发技术路线核心代码参考示例本项目开发思路结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;已开发项目效果实现截图 同行可拿货,招校园代理 Python企业数据资产登记系统_6op56dox_pycha…

作者头像 李华
网站建设 2026/6/15 15:08:48

Mem Reduct内存管理:从入门到精通的完整指南

Mem Reduct内存管理&#xff1a;从入门到精通的完整指南 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct 还在为电脑卡…

作者头像 李华
网站建设 2026/6/15 20:10:15

GitHub Actions自动化部署Qwen3-VL-30B服务上线流程

GitHub Actions自动化部署Qwen3-VL-30B服务上线流程 在AI驱动的应用日益复杂的今天&#xff0c;如何快速、安全地将大型多模态模型推送到生产环境&#xff0c;已成为工程团队面临的核心挑战。尤其像 Qwen3-VL-30B 这类参数量高达300亿的视觉语言模型&#xff0c;其部署不仅涉及…

作者头像 李华
网站建设 2026/6/15 18:56:16

Python安装依赖包踩坑记录:成功运行Qwen3-VL-30B经验分享

Python安装依赖包踩坑记录&#xff1a;成功运行Qwen3-VL-30B经验分享 在部署多模态大模型的实践中&#xff0c;最让人“血压拉满”的往往不是模型本身的设计&#xff0c;而是环境配置环节——明明代码写得没问题&#xff0c;却因为一个torch版本不匹配、CUDA找不到、或者某个库…

作者头像 李华