游戏单位属性奖励延迟发放机制

游戏中如果有这样的机制:

  • 击杀敌人后概率增加生命值
  • 击杀敌人后概率增加攻击力
  • 攻击敌人时概率增加防御力
  • 死亡时概率增加基础属性

如果这些属性在事件发生时就实时发放给对应单位,可以使得每一点属性得到实时更新。
但如果像这样的情况发生得相当频繁,就有可能在游戏后期、单位数量繁多的情况下,造成程序的运算压力。

我们可以使用延迟发生的机制,在事件发生时,不立即发放属性,而是将属性的变化记录下来,在特定时间一次性发放。
此时所有的属性变化会在短时间内瞬间完成,减少大量不必要的运算。

伪代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function on_event(e, p)
if e['英雄被攻击'] then
lazyattr['攻击力'] = lazyattr['攻击力'] + p['被攻击时增加攻击力']
end
if e['英雄被攻击'] then
lazyattr['生命值'] = lazyattr['生命值'] + p['被攻击时增加生命值']
end
if e['英雄杀死敌人'] then
lazyattr['生命值'] = lazyattr['生命值'] + p['杀敌时增加生命值']
end
if e['游戏时间逝去1秒'] then
unit_add_attr('攻击力', p['英雄'], lazyattr['攻击力'])
unit_add_attr('生命值', p['英雄'], lazyattr['生命值'])

lazyattr['攻击力'] = 0
lazyattr['生命值'] = 0
end
end