Jeff Orkin- Monolith Productions
jorkin@blarg.net
摘自<AI编程真言>
通用触发器系统
(A Generic Trigger System)
触发器系统的职责
在游戏的触发器系统主要负责两个任务:
对游戏中的所有智能体(agents)响应事件(event)进行跟踪;
使智能体对于这些事件作出响应时的处理开销最小化
集中化的触发器系统能够根据每一个触发器消息的优先级和影响范围进行过滤(Filter), 从而保证对于每一个智能体而言, 只处理它能力所能及的范围内的拥有最高优先级的触发器消息.
关于触发器消息(Trigger Message)
触发器消息是游戏设计者所希望的使游戏中的智能体作出反应的任何”刺激源”(Trigger Source).
在动作类游戏中, 触发器消息可以是会影响智能体行为的任何
听觉和视觉刺激, 例如
枪声, 爆炸, 邻近的敌人或者尸体.
触发器消息也可以由游戏中涉及智能体的非生命物体发出, 例如
游戏中的操纵杆和控制平台.
触发器消息可以通过多种途径来实现, 包括
游戏代码, 脚本, 控制台命令 或者 动画关键桢.
智能体可以确定哪些种类的触发器消息是对它有意义的.
集中化的优点
如果不使用集中化触发器系统的话, 那就需要对事件进行轮询(polling).
轮询的优点
1 轮询要求每一个智能体查询整个游戏世界来寻找感兴趣的事件
Eg: 开枪
2 减轻CPU的负荷, 某些agent会处于休眠状态
触发器的工作
事件触发的时候, 相应的触发器信息就会被注册(register). 在每一个时间周期, 系统只需要遍历智能体列表. 然后对每一个智能体, 系统采用以系列的测试来决定是否对当前存在的触发器信息感兴趣. 如果某一个智能体对当前所有的触发器都不感兴趣, 他就根本不需要任何额外的处理.
触发器消息的过滤
如果一个智能体对当前存在的任何触发器信息都不敢兴趣, 那么它根本不需要任何的额外处理. 更为重要的是, 系统还可以根据触发器消息的类型和范围来过滤触发器信息.
触发器消息的响应优先级
结合分组的触发器消息过滤.
通过对当前的触发器信息的优先级进行排序, 系统可以保证在任何时刻, 智能体制会对最重要的事件进行响应. 例如:
当一个敌人站在你面前, 你根本不会再去理会远处的脚步声.
集中化系统比轮询系统具有更高的通用性, 可重用性和扩展性.
当一个新的触发器被引入系统后, 几乎不必编写任何特殊的编码来处理这一新的类型.
触发器的生存周期
触发监听者
触发监听者负责监听触发器的构建, 销毁等
NOTE
下面的部分待补完更新,具体补完时间为完成当前模块再次考虑触发器系统设计的时候...