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

lua 游戏架构 之 游戏 AI (一)ai_base

定义了一个基础AI组件类,它的作用是为游戏中的AI实体提供一个通用的框架和接口。以下是它提供的几个主要功能和概念:

1. **类定义**:继承`class` 函数

2. **构造函数 (`ctor`)**:类的构造函数用于初始化新创建的对象实例。它接受 `entity` 和 `priority` 两个参数,并将它们存储为对象的属性。

3. **属性管理**:
   - `_entity`:关联的实体或对象。
   - `_priority`:AI组件的优先级。
   - `_turnOn`:AI组件的开关状态。
   - `_timeTick`:用于跟踪时间或逻辑周期的变量。
   - `_type`:AI组件的类型,可能用于区分不同类型的AI行为。
   - `_name`:AI组件的名称,初始为 "undef"。

4. **状态管理**:提供 `OnEnter` 和 `OnLeave` 方法来管理AI组件的激活和停用状态。

5. **有效性检查**:`IsValid` 方法用于检查AI组件是否处于有效状态。

6. **更新逻辑**:`OnUpdate` 和 `OnLogic` 方法可能在游戏循环中被调用,用于更新AI组件的状态和逻辑。

7. **行为控制**:`OnStopAction` 和 `OnAttackAction` 方法为停止和执行攻击行为提供接口。

8. **组件创建**:`create_component` 函数用于创建 `ai_base` 类的新实例,这可能是为了方便在代码中快速生成AI组件。

9. **命名管理**:`SetName` 和 `GetName` 方法允许设置和获取AI组件的名称。

10. **开关控制**:`IsTurnOn` 和 `Switch` 方法用于检查和切换AI组件的状态。

这个脚本本身不包含具体的AI逻辑,但它定义了一套接口和属性,可以基于这个基础类派生出具有特定行为的AI组件。例如,可以创建追逐敌人的AI、巡逻的AI或使用特定策略的AI等,都继承自这个基础类。这种设计模式有助于保持代码的组织性和可维护性,同时促进代码的重用。

------------------------------------------------------local require = require------------------------------------------------------
ai_base = class("ai_base");
function ai_base:ctor(entity, priority)self._entity	= entity;self._priority	= priority;self._turnOn	= false;self._timeTick	= 0;self._type		= eAType_BASE;self._name		= "undef";
endfunction ai_base:SetName(name)self._name = name;
endfunction ai_base:GetName()return self._name;
endfunction ai_base:OnAttach()
endfunction ai_base:OnDetach()
endfunction ai_base:OnEnter()if not self._turnOn thenself._turnOn	= true;self._timeTick	= 0;return true;endreturn false;
endfunction ai_base:OnLeave()if self._turnOn thenself._turnOn = false;return true;endreturn false;
endfunction ai_base:IsTurnOn()return self._turnOn;
endfunction ai_base:Switch()if not self:IsValid() thenreturn false;endreturn true;
endfunction ai_base:IsValid()return true;
endfunction ai_base:OnUpdate(dTime)if not self:IsValid() thenreturn false;endreturn true;
endfunction ai_base:OnLogic(dTick)if not self:IsValid() thenreturn false;endself._timeTick = self._timeTick + dTick * i3k_engine_get_tick_step();return true;
endfunction ai_base:OnStopAction(action)
endfunction ai_base:OnAttackAction(id)
endfunction create_component(entity, priority)return ai_base.new(entity, priority);
end


 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【电源专题】结合锂电池相关资料和华为手机聊聊锂离子电池使用条件限制
  • 使用 cURL 命令测试网站响应时间
  • Dubbo SPI 之路由器
  • 大数据处理:大数据处理框架Hadoop、Spark
  • 自动化网络爬虫:如何它成为提升数据收集效率的终极武器?
  • 使用Amazon Web Services Lambda把天气预报推送到微信
  • 转型做产品经理,考NPDP有什么好处?
  • JAVA中的异常:异常的分类+异常的处理
  • 好用的电脑屏幕监控软件推荐,什么软件能够监控电脑?
  • python-NLP:1中文分词
  • Android中Intent和IntentFilter
  • PCB焊盘设计有哪些标准?对板厂生产有何影响?
  • Modbus转BACnet/IP网关BA100-配硬件说明
  • 基于dcm4chee搭建的PACS系统讲解(一)docker搭建精简版
  • C#与C++交互开发系列(三):深入探讨P/Invoke基础知识
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 30天自制操作系统-2
  • canvas 高仿 Apple Watch 表盘
  • ECMAScript入门(七)--Module语法
  • Effective Java 笔记(一)
  • js正则,这点儿就够用了
  • Laravel Telescope:优雅的应用调试工具
  • laravel with 查询列表限制条数
  • Vue全家桶实现一个Web App
  • WePY 在小程序性能调优上做出的探究
  • 基于Android乐音识别(2)
  • 区块链将重新定义世界
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 深入浅出Node.js
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 移动端唤起键盘时取消position:fixed定位
  • 终端用户监控:真实用户监控还是模拟监控?
  • 最简单的无缝轮播
  • UI设计初学者应该如何入门?
  • 国内开源镜像站点
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (黑马C++)L06 重载与继承
  • (回溯) LeetCode 40. 组合总和II
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (接口自动化)Python3操作MySQL数据库
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (论文阅读11/100)Fast R-CNN
  • (全注解开发)学习Spring-MVC的第三天
  • (十)c52学习之旅-定时器实验
  • (转)为C# Windows服务添加安装程序
  • .gitignore文件忽略的内容不生效问题解决
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET BackgroundWorker
  • .NET CORE Aws S3 使用
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .NET 项目中发送电子邮件异步处理和错误机制的解决方案