本文档描述的是3.6及以后版本,对于3.5及以前的老版本请参考分类“3.5”。
对于枚举类型的使用,包括新增全新的枚举和扩展使用已有的枚举。对于新增的枚举,又包括编辑器是否自动生成该枚举的代码。
实际上,我们将新增枚举,又不自动生成该枚举代码的情况,认为跟扩展使用已有的枚举是一致的,即都是在程序端已经有了该枚举的定义代码(要么手工编写,要么第三方代码已经包含了该枚举的定义),不用再让编辑器自动生成。
进而,后文将只通过“生成代码”和“不生成代码”来区分上面所说的各种使用情况,但这里需要注意的是,生成或不生成代码,只是针对枚举本身的定义而言,而枚举相关的“胶水”代码都是会自动生成的,并且必须要整合到自己的项目中一起编译构建。
1. 如果是“生成代码”的情况,则忽略这一步说明。否则,如果是“不生成代码”的情况,这里假定程序端已经有了枚举类型文件FirstEnum.h,该文件中包含了枚举“FirstEnum”的定义,如下代码所示:
enum FirstEnum { 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 // 如下枚举的定义代码,会根据是否勾选了上面所说的“生成代码”选项来决定是否生成 enum FirstEnum { e1, e2, e3, }; // 如下代码,不管是否勾选了“生成代码”选项,都会自动生成 DECLARE_BEHAVIAC_ENUM_EX(FirstEnum, FirstEnum); BEHAVIAC_DECLARE_TYPE_VECTOR_HANDLER(FirstEnum); // behaviac_customized_types.cpp BEHAVIAC_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。