当前位置: 首页 > news >正文

教程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.cnnetsun.cn/news/52774.html

相关文章:

  • Week 29: 深度学习补遗:MoE的稳定性机制与路由策略实现
  • 25年12月14日复盘总结,大盘方向,操作建议,板块机会,实用干货
  • what?动态规划?
  • CommonJS 的缓存机制:为什么二次 require 得到的对象是同一个?
  • 跨标签页通信的五种方案:LocalStorage、BroadcastChannel 与 SharedWorker
  • JavaScript 与 CSS 变量交互:利用 setProperty 动态修改 CSS 变量实现主题切换
  • 2、UNIX基础入门教程
  • 6、互联网通信全解析:从邮件到多媒体的多元世界
  • vue基于Spring Boot框架 农产品销售供应商管理系统_m11i2507_
  • 10、UNIX系统管理:技术与实践指南
  • vue基于SpringBoot的健身房管理系统设计与实现_45vy0km9_
  • 父子进程关系与终止机制详解
  • Qt面试题合集(一)
  • Claude vs ChatGPT vs Gemini:全方位对比与选用指南
  • 大模型量化技术原理-ZeroQuant系列(一)
  • RISCV的异常和中断
  • vue基于Spring Boot框架的水果商城设计与实现_6628xfyb_
  • 【入门级-数据结构-3、特殊树:完全二叉树的定义与基本性质】
  • python用openpyxl操作excel-读取或创建excel文件
  • 刷题日记day5(二分+前缀和)
  • 005-AES:采招网
  • 基于python+django的在线考试系统(源码+lw+部署文档+讲解等)
  • C语言一维与二维数组名详解:从本质理解到高手应用
  • 当水印遇见AI:一场像素级的美学修复之旅
  • 软件测试是保障软件质量的关键环节,尤其在当前无法完全依赖形式化方法证明软件正确性的背景下,测试成为发现缺陷最主要、最有效的手段
  • 如何用AI快速生成Flink面试题答案?
  • 10分钟搞定:DeepSeek本地开发环境快速搭建方案
  • 豆包AI手机智能操控的硬核原理
  • CVE-2023-48795漏洞深度解析:原理与影响
  • 深入解析strspn:字符串扫描的精确尺子