DOOM3 命令系统分析

doom3命令系统中,重要的类有idEventDef负责管理命令的注册声明,idEvent是命令
对象。
该命令系统主要数据结构有 eventDefList , FreeEvents,EventQueue,EventPool
其中EventPool是一个声明为 idEvent 的 4096个对象的数组,该数组是命令对象的分配池。
这样在实时运行时,省去了从堆中分配命令与在堆中释放的时间。在初始化阶段,调用
idEvent::Init()函数会将EventPool中的所有的命令节点都加入到FreeEvents列表中,以便
分配。而idEvent::Alloc函数是为上层分配命令的函数,该函数直接从FreeEvents列表中摘出
一个idEvent对象来给上层调用者使用,而当上层调用者对分配得的idEvent对象调用Free()时
会将当前idEvent节点还给FreeEvents。由于FreeEvents的节点实际是来自EventPool故有命令数量
限制,最大命令数量不得超过4096个,若超过会关闭游戏。
为了将命令加入队列中,需要调用idEvent的Schedule函数,该函数会根据传入的时间time
将该命令加入EventQueue命令列表的适当位置,该EventQueue是一个根据时间递增顺序的命令列表。
Schedule函数将遍历EventQueue列表的所有项找到自己time的位置,然后插入之。
该命令系统的核心函数就是ServiceEvents(),该函数是一个static member函数,该函数
会根据当前游戏时间,将在当前时间之前的所有命令泵出并加以传给idEvent的object变量加以处理
并将处理后的命令返还给FreeEvents用于再分配。
命令的定义由idEventDef负责,该类的主要参数是name,formatspec.该类负责注册命令的类型。
name变量是一个const char* 该变量指定了命令的名称。formatspec指定的是参数类型。当该idEventDef
构造时,会自动将自身保存在static idEventDef* eventDefList中。该eventDefList是定义命令
的查找表。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值