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

打印 上一主题 下一主题

主题 820|帖子 820|积分 2460

定义了一个基础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等,都继承自这个基础类。这种计划模式有助于保持代码的构造性和可维护性,同时促进代码的重用。
  1. ------------------------------------------------------
  2. local require = require
  3. ------------------------------------------------------
  4. ai_base = class("ai_base");
  5. function ai_base:ctor(entity, priority)
  6.         self._entity        = entity;
  7.         self._priority        = priority;
  8.         self._turnOn        = false;
  9.         self._timeTick        = 0;
  10.         self._type                = eAType_BASE;
  11.         self._name                = "undef";
  12. end
  13. function ai_base:SetName(name)
  14.         self._name = name;
  15. end
  16. function ai_base:GetName()
  17.         return self._name;
  18. end
  19. function ai_base:OnAttach()
  20. end
  21. function ai_base:OnDetach()
  22. end
  23. function ai_base:OnEnter()
  24.         if not self._turnOn then
  25.                 self._turnOn        = true;
  26.                 self._timeTick        = 0;
  27.                 return true;
  28.         end
  29.         return false;
  30. end
  31. function ai_base:OnLeave()
  32.         if self._turnOn then
  33.                 self._turnOn = false;
  34.                 return true;
  35.         end
  36.         return false;
  37. end
  38. function ai_base:IsTurnOn()
  39.         return self._turnOn;
  40. end
  41. function ai_base:Switch()
  42.         if not self:IsValid() then
  43.                 return false;
  44.         end
  45.         return true;
  46. end
  47. function ai_base:IsValid()
  48.         return true;
  49. end
  50. function ai_base:OnUpdate(dTime)
  51.         if not self:IsValid() then
  52.                 return false;
  53.         end
  54.         return true;
  55. end
  56. function ai_base:OnLogic(dTick)
  57.         if not self:IsValid() then
  58.                 return false;
  59.         end
  60.         self._timeTick = self._timeTick + dTick * i3k_engine_get_tick_step();
  61.         return true;
  62. end
  63. function ai_base:OnStopAction(action)
  64. end
  65. function ai_base:OnAttackAction(id)
  66. end
  67. function create_component(entity, priority)
  68.         return ai_base.new(entity, priority);
  69. end
复制代码

 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

傲渊山岳

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表