战斗系统性能瓶颈优化(一)

  MMORPG的大规模团战中,需要经常判断两个单位之间的阵营关系,从而为技能生效提供判断依据(往往分为敌方、我方、友方、中立方等)。如果N个人同时使用技能,这个判断函数的调用次数将会是N**2的量级。
  而随着游戏的生命周期的延长,这种判断会变得越来越繁杂(不加东西怎么做社交?怎么坑钱^_^)。这时候,这个判断函数就有可能会(肯定会)成为战斗系统的瓶颈。
  优化方案:
  建立cache缓存阵营关系
  实现细节:
  1. 在某个量级上建立一个cache,这个cache用来存储未来的阵营关系,初始为空
  2. 在战斗单位上新增一个属性ver,这个属性用来标记战斗单位的所有阵营关系参数集合的版本,一旦其中任何一个参数发生改变,ver+=1
  3. 一旦发生某次判断得到结果ret,就以当时的(src_id, tgt_id)作为key,存入(src_ver, tgt_ver, ret)
  4. 下次发生判断时,就先去cache里查询,如果命中,就得到上一次的src_ver, tgt_ver, ret,将ver做对比,如果没有发生改变,就直接读取ret,否则就重新进行判断并重复3中操作(切记阵营关系只是单向的,不一定是双向的,所以src-tgt跟tgt-src不一定结果相同)

  此时只是功能上实现了优化,随着时间的推移,cache的大小会越来越大,而其中很多单位已经离开这个管理量级的管理范围了,他们的阵营关系已经无用。因此:
  5. 加入定时器,定时clear此cache。由于业务上特点,这种判断是集中在某段时间内的频繁调用,因此不需要加入时间戳来保证“xx时间内不用的cache才被清除”这种优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值