教程9:枚举的添加和使用-–-behaviac

原文

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

对于枚举类型的使用,包括新增全新的枚举和扩展使用已有的枚举。对于新增的枚举,又包括编辑器是否自动生成该枚举的代码。

实际上,我们将新增枚举,又不自动生成该枚举代码的情况,认为跟扩展使用已有的枚举是一致的,即都是在程序端已经有了该枚举的定义代码(要么手工编写,要么第三方代码已经包含了该枚举的定义),不用再让编辑器自动生成。

进而,后文将只通过**“生成代码”“不生成代码”**来区分上面所说的各种使用情况,但这里需要注意的是,生成或不生成代码,只是针对枚举本身的定义而言,而枚举相关的“胶水”代码都是会自动生成的,并且必须要整合到自己的项目中一起编译构建。

1. 如果是“生成代码”的情况,则忽略这一步说明。否则,如果是“不生成代码”的情况,这里假定程序端已经有了枚举类型文件FirstEnum.h,该文件中包含了枚举“FirstEnum”的定义,如下代码所示:

enumFirstEnum{e1,e2,e3};

2. 在类型信息浏览器中新增跟程序端同名的枚举类型“FirstEnum”,并且根据自己的需要,来决定是否勾选“生成代码”选项(如果只是扩展使用已有的枚举,则不需要勾选),如下图所示:

3. 为枚举“FirstEnum”添加成员e1、e2和e3,这跟程序端的定义保持一致,如下图所示:

4. 对于C++版的运行时库,如果是“生成代码”的情况,则忽略这一步操作。否则,如果是“不生成代码”的情况,则说明程序端已经有了包含该枚举类型的头文件。点击上图右上方的“设置头文件”按钮,弹出“C++导出设置”窗口,并添加已有的枚举类型头文件FirstEnum.h,如下图所示:

5. 点击类型信息浏览器右下方的“应用”按钮,这样会在“代码生成位置”中生成该枚举的定义(如果上面勾选了“生成代码”选项)及相关的“胶水”代码behaviac_customized_types.h和behaviac_customized_types.cpp等文件,如下代码所示:

// behaviac_customized_types.h// 如下枚举的定义代码,会根据是否勾选了上面所说的“生成代码”选项来决定是否生成enumFirstEnum{e1,e2,e3,};// 如下代码,不管是否勾选了“生成代码”选项,都会自动生成DECLARE_BEHAVIAC_ENUM_EX(FirstEnum,FirstEnum);BEHAVIAC_DECLARE_TYPE_VECTOR_HANDLER(FirstEnum);// behaviac_customized_types.cppBEHAVIAC_BEGIN_ENUM_EX(FirstEnum,FirstEnum){BEHAVIAC_ENUMCLASS_DISPLAY_INFO_EX(L"FirstEnum",L"");BEHAVIAC_ENUM_ITEM_EX(e1,"e1");BEHAVIAC_ENUM_ITEM_EX(e2,"e2");BEHAVIAC_ENUM_ITEM_EX(e3,"e3");}BEHAVIAC_END_ENUM_EX()

6. 为FirstAgent类新增成员属性p1,其类型是枚举“FirstEnum”,如下图所示:

7. 点击类型信息浏览器右下方的“应用”按钮,将“代码生成位置”中behaviac_generated/types目录下所有生成的代码文件,添加到自己的项目中一起编译构建。

8. 新增行为树“EnumBT”,并使用成员属性p1来赋值和做比较运算,如下图所示:

9. 执行该行为树,得到如下执行结果:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1014669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QSharedMemory 变量在对象析构的时候要怎么处理

在Qt中使用QSharedMemory时,对象析构时的正确处理至关重要,主要涉及共享内存的释放和跨进程同步问题。以下是关键处理原则和步骤: 1. 自动析构行为(Qt内置机制) 自动detach():当QSharedMemory对象销毁时&…

TikTok达人合作订单太繁琐?影刀RPA一键智能处理,效率飙升10倍![特殊字符]

TikTok达人合作订单太繁琐?影刀RPA一键智能处理,效率飙升10倍!🚀作为影刀RPA的资深布道者,我深知MCN机构在达人订单管理上的"手忙脚乱"。今天,就带你用RPA技术打造达人合作"智能中台"&…

投机推理原理及设计

投机推理的核心思想是所谓的“草稿-验证”范式:快速生成多个草稿token,然后利用大语言模型的并行计算性一次验证所有草稿token,并决定接受多少token。例如,我们利用一个只有1B的小模型快速生成了8个草稿token draf…

前端保存用户登录信息 深入全面讲解

前端保存用户登录信息的核心目标是持久化登录状态(减少重复登录)、提升用户体验,同时必须兼顾安全性(防止信息泄露、伪造、劫持)。本文从存储方案选型、安全防护、最佳实践、常见问题等维度,全面解析前端登…

影刀RPA颠覆传统!TikTok售后工单智能处理,效率提升500%[特殊字符]

影刀RPA颠覆传统!TikTok售后工单智能处理,效率提升500%🚀每天被海量TikTok售后工单淹没?重复复制粘贴到凌晨?别慌!今天我用影刀RPA打造智能工单处理机器人,让你从此告别加班,体验什么…

【开题答辩全过程】以 基于PHP的乐高学习网站管理系统的设计实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

【Java毕设全套源码+文档】基于springboot的高校大学生心理咨询管理系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

异步SAR Simulink模型及其在MATLAB仿真中的应用

异步SAR simulink模型(和virtuoso电路模型很像,精度自己可以改)。 做MATLAB仿真,包括zoom或者其他混合架构adc可以用到这个模型。在玩ADC设计的时候,异步SAR结构就像个宝藏男孩——速度快还省电,但要把行为…

【开题答辩全过程】以 基于Node.js的医院预约挂号系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

vue基于Spring Boot框架的在线电影票购买系统的设计与实现_8xxt52nn

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

学完这个C++内存池案例,你对内存管理的理解将超越大部份人

项目它实现了一个生产级的C++内存池管理系统,融合了多层级内存块管理、智能碎片整理、线程安全机制和高性能对象池,旨在提供一个高效、可靠、易用的通用内存管理解决方案。本文将深入剖析其设计理念、实现原理、核心源代码,带你走进高性能内存管理的世界。 一、核心实现原理…

Cplusplus生成代码大小的说明-–-behaviac

原文 C版本广泛的用到了template。 Code bloat occurs because compilers generate code for all templated functions in each translation unit that use them. Back in the day the duplicate code was not consolidated resulting in “code bloat”. These days the dupl…

手把手拆解三菱PLC印字机实战项目

三菱PLC组装印字机完整项目资料 1、采用三菱FX3U,威纶通MT6071IP触摸屏 ( 2、有说明书,BOM零件表,电路图 3、程序有完整的注释,结构清晰明了。 很好的项目学习资料。 工业02-18.电气印字机电气最近淘到一套工业级印字机的完整项目…

开发功能开关-–-behaviac

原文 behaviac的运行时提供有核心的更新行为树的功能,在其之上,还有logging,热加载,连调等调试功能。这些调试功能只是‘开发’功能,在游戏发布后实际上是不需要的。 除了可以在config.h中定义BEHAVIAC_RELEASE宏为1…

三菱PLC组装机学习笔记

三菱PLC组装机,完整项目资料 1、采用三菱FX3U,威纶通触摸屏 2、三个伺服,多工位 3、程序有完整的注释,结构清晰明了。 很好的项目学习资料。 工业02-17.泡棉组装最近在学习三菱PLC的项目,发现这是一个挺有意思的方向。项目用的是…

Go 语言结构体

Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。 结构体表示一项记录,比如保存图书馆的书籍记录,每本书有以下属性: Titl…

当卷积网络遇上双向记忆:玩转时间序列预测新姿势

基于python语言的CNN—BiLSTM—Attention模型实现时间序列预测。 可实现多变量预测单变量,也可以实现单变量预测单变量。 多步预测单步预测随意切换 替换数据即可运行模型,参数修改方便, 时间序列预测总让人又爱又恨,今天咱们来点…

【开题答辩全过程】以 高校篮球社团管理系统 为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

JavaScript闭包终极指南:从原理到实战(2025版)

JavaScript闭包终极指南:从原理到实战(2025版)闭包是JavaScript的核心特性,也是面试高频考点与开发易错点。很多开发者只停留在“函数嵌套函数”的表层认知,却不懂其底层原理与实战价值。本文从“内存模型→语法定义→…

【开题答辩全过程】以 基于PHP的公司员工管理系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…