原生 sln 生成
生成代码
- behaviac_types.h 需要包含到项目代码中,便于使用自动生成的类型和胶水代码
- internal/behaviac_agent_member_visitor.h 包含用于访问类的私有属性和方法的胶水代码
- internal/behaviac_agent_meta.h 和 internal/behaviac_agent_meta.cpp 包含用于注册类及其属性、方法、实例等信息的胶水代码
构建 c++ 运行库
- 下载源码
- 下载 cmake
- 下载 vs2019
- 用于 cmake 构建 vs2019 版本
- 使用 cmake 的 cmake_gui 生成

- 注意,通过
cmake --help 可以看到 2019 无法显示指定 win64,貌似默认就是 64 位了
- 注意
选项选择关闭, 则生成静态库 - 找到
lib_build 下的 behaviac.sln,用 vs2019 打开
- 打开上面 cmake 生成后 lib_build 文件夹中的 ALL_BUILD.vcxproj
- 关闭警告报错(都配一下)

- 选择 libbehaviac

- 生成 lib 包 /或者对着项目右键生成

生成
- 如果是静态库,则会生成到 lib 文件夹中
- 如果是运行库,会生成到 bin 文件夹中!!!
helloWorld
实际文件夹

- 蓝色是 behaviac 生成的胶水代码
- 黄色是 behaviac 源码,也是 lib 库的头文件
- 紫色是上一节生成的静态库 lib
vs项目大纲

引入 inc

引入lib

代码
#include <iostream>#include "exported/behaviac_generated/types/behaviac_types.h"using namespace std;FirstAgen* p_firstAgen = NULL;/* 初始化加载目录和文件格式*/bool InitBehaviac();/* 创建实例,加载指定的行为树,*/bool InitPlayer();/* 执行行为树*/void UpdateLoop();/* 对创建的 agent 实例进行销毁释放*/void CleanUpPlayer();/** 清理整个工作区*/void CleanUpBehaviac();int main(){ cout << InitBehaviac() << endl; cout << InitPlayer() << endl; UpdateLoop(); CleanUpPlayer(); CleanUpBehaviac(); return 0;}bool InitBehaviac() { cout << "init behaviac" << endl; // 设置加载编辑器导出的行为树所在的目录。 behaviac::Workspace::GetInstance()->SetFilePath("./exported"); // 设置加载的行为树格式,这里用的是xml格式。 behaviac::Workspace::GetInstance()->SetFileFormat(behaviac::Workspace::EFF_xml); return true;}bool InitPlayer() { cout << "init player" << endl; // 创建 Agent 子类的实例 p_firstAgen = behaviac::Agent::Create<FirstAgen>(); // 加载行为树,参数是行为树名字 bool b_ret = p_firstAgen->btload("FistBT"); // 指定当前准备执行的行为树 p_firstAgen->btsetcurrent("FistBT"); return b_ret;}void UpdateLoop() { cout << "update loop" << endl; int frames = 0; behaviac::EBTStatus status = behaviac::BT_RUNNING; while (status == behaviac::BT_RUNNING) { cout << "frame" << ++frames << endl; // btexec() 用于执行一次 Agent::btsetcurrent() 执行的行为树 // 也可以调用Workspace::Update()的方式来统一执行所有Agent实例的行为树,详见文章《运行时端的执行流程 https://www.behaviac.com/tutorial13_updateloop/》。 status = p_firstAgen->btexec(); cout << "curretn status: " << status << endl; }}void CleanUpPlayer() { cout << "clean up player" << endl; behaviac::Agent::Destroy(p_firstAgen);}void CleanUpBehaviac() { cout << "clean up behaviac" << endl; behaviac::Workspace::GetInstance()->Cleanup();}
行为树代码
void FirstAgen::SayHello(){///<<< BEGIN WRITING YOUR CODE SayHello // 要写在里面哦 printf("FirstAgen: hello !!!!!!!!!!\n");///<<< END WRITING YOUR CODE}
输出

cmake 方式
cmake
cmake文档
cmake官方文档