news 2026/4/25 14:57:20

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
教程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。

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

DAY37 早停策略和模型权重的保存

浙大疏锦行 import torch import torch.nn as nn import torch.optim as optim from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split import numpy as npirisload_iris() Xiris.data yiris.targetX_train,X_test,y_train,y_testtra…

作者头像 李华
网站建设 2026/4/23 6:08:52

g++演示如何从C++代码到可执行程序

🎬 个人主页:Vect个人主页🎬 GitHub:Vect的代码仓库🔥 个人专栏: 《数据结构与算法》《C学习之旅》《Linux》⛺️Per aspera ad astra. 文章目录1. C如何从代码到可执行文件1.0. 一小段代码进行演示1.1. 预处理阶段: g…

作者头像 李华
网站建设 2026/4/23 11:47:41

第八周学习

这周完成了课程中关于豆瓣首页的制作,初步掌握了制作静态页面的方法 项目实战-豆瓣首页 图标 <title>豆瓣</title><link rel"shortcut icon" type"image/x-icon" href"./favicon.ico"><link rel"stylesheet" h…

作者头像 李华
网站建设 2026/4/23 1:38:36

基于PLCS7 - 200的饮料自动机设计分享

基于PLCS7-200的饮料自动机 本设计包括设计报告&#xff0c;仿真工程。 设计方案 1&#xff0e;自动售货机有3个投币孔分别为1、5和10元。 2&#xff0e;售货共有汽水和咖啡两种选择&#xff0c;饮料分为十二元和十五元。 3.如果顾客投入硬币在限定的时间内&#xff08;2分钟&a…

作者头像 李华
网站建设 2026/4/23 11:53:03

Java基础大厂高频后台开发-面试常考八股题

一、基础概念 1)JVM是什么&#xff1a; ● 概念&#xff1a;运行 Java 字节码的虚拟机。针对不同系统有不同的实现&#xff0c;保证Java"一次编译&#xff0c;到处运行" ● 作用&#xff1a;将Java字节码转换为特定平台的机器码&#xff0c;实现跨平台性 ● 关键&…

作者头像 李华
网站建设 2026/4/24 19:13:30

实习面试题-MapReduce 面试题

1.MapReduce 的基本工作流程是什么?它包括哪些主要阶段? 回答重点 MapReduce 是一种编程模型及其相关实现,用于处理和生成大规模数据集。基本工作流程包括两个主要阶段:Map 阶段和 Reduce 阶段。 1)Map 阶段:在这个阶段,输入数据被分成小片段,每个片段被分配给一个 …

作者头像 李华