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"。

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

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

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

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

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

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

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

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

Lua 复制代码
------------------------------------------------------

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";
end

function ai_base:SetName(name)
	self._name = name;
end

function ai_base:GetName()
	return self._name;
end

function ai_base:OnAttach()
end

function ai_base:OnDetach()
end

function ai_base:OnEnter()
	if not self._turnOn then
		self._turnOn	= true;
		self._timeTick	= 0;

		return true;
	end

	return false;
end

function ai_base:OnLeave()
	if self._turnOn then
		self._turnOn = false;

		return true;
	end

	return false;
end

function ai_base:IsTurnOn()
	return self._turnOn;
end

function ai_base:Switch()
	if not self:IsValid() then
		return false;
	end

	return true;
end

function ai_base:IsValid()
	return true;
end

function ai_base:OnUpdate(dTime)
	if not self:IsValid() then
		return false;
	end

	return true;
end

function ai_base:OnLogic(dTick)
	if not self:IsValid() then
		return false;
	end

	self._timeTick = self._timeTick + dTick * i3k_engine_get_tick_step();

	return true;
end

function ai_base:OnStopAction(action)
end

function ai_base:OnAttackAction(id)
end

function create_component(entity, priority)
	return ai_base.new(entity, priority);
end
相关推荐
城事漫游Molly1 分钟前
用AI提炼研究问题与假设的完整提示词——从模糊想法到精准RQ/Hypothesis,AI辅助精化全流程
人工智能·机器学习·prompt·ai for science·博士生必读·应用语言学·研究问题
AI刀刀2 分钟前
豆包智能体对话导出后,如何构建长期归档与高效检索体系?
android·人工智能·word·excel·ai导出鸭
workflower2 分钟前
室内外配送机器人-应用路径
人工智能·机器学习·设计模式·矩阵·自动化
Token炼金师6 分钟前
生产化的鸿沟:流式、缓存、可观测、红蓝对抗、限流降级与评测 —— 工程化六渡
人工智能·llm·可观测性·红蓝对抗·缓存策略·限流降级·评测体系
DMD1687 分钟前
AI海外外贸部:AI正在重新定义企业海外市场开发模式
大数据·人工智能·数字化转型·ai技术开发
PhotonixBay12 分钟前
共聚焦成像核心原理:针孔、PSF与三维形貌测量技术
人工智能·测试工具·算法
橘子星21 分钟前
MCP协议深度解析:从代码实例看跨进程工具调用
人工智能
明天有专业课28 分钟前
Harness:AI Agent 的"操作系统"
人工智能·agent
柒星栈42 分钟前
国产大模型“三国杀“:豆包收费、DeepSeek 开源、Kimi 2.5 万亿参数
人工智能·开源
星辰AI1 小时前
ESLint 自定义规则实战:用 AST 分析封堵团队特有的代码坏味道
人工智能·ai·语言模型