第8章 感知
本章主题:
- 创建、发送和接收事件;
- 赋予智能体视觉和听觉;
- 创建相互竞争的智能体团队;
- 根据事件消息更新行为;
- 通过消息管理智能体间的通信。
现在,我们的智能体对于沙箱是一个全知全能的存在。通过直接选择敌人的位置,智能体能快速而准确地做出反应,游戏玩家可能认为这是在作弊。为了让智能体的交互和反应更为真实可信,我们需要实现感知系统。本质上说,就是为智能体赋予看、听和相互交流的能力。
8.1 事件
到目前为止,我们的智能体都在它们各自的虚拟机中运行,相互通信并不容易。为了解决这个问题,我们会创建一种叫事件的数据结构,它可以在智能体以及沙箱之间进行传递。
8.1.1 属性
创建事件,简单来说就是创建一个具有一点限制的Lua表。由于事件是由沙箱序列化并传递到每个虚拟机中的,只有一些简单的表属性可以添加到事件中。
每个可支持的属性如表8-1所示。
表8-1
事件属性类型 |
描述 |
---|---|
|
一个或为真或为假的Lua值 |
|
Lua数字,内部是以浮点值表示 |
|
一个代码对象、沙箱、沙箱对象或者智能体 |
|
任何Lua字符串值 |
|
任何由 |
事件内部不能有嵌套的表格,任何不被支持的属性类型在序列化时都会被丢弃。这是目前沙箱C++端事件序列化中的一个限制。
8.1.2 发送事件
创建好事件后就可以发送给沙箱了。由于所有的对象都由沙箱实例所拥有,事件的派发是由沙箱在内部处理的。在发送事件时,需要提供一个消息类型字符串,用来帮助事件接收者解析事件的数据。 ...
Get Lua游戏AI开发指南 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.