与单位具体实现隔离形成基类
我们经常看到一个单位类中包含属性、行为、控制等等的实现,最终的结果是此代码量异常的庞大。
为类瘦身有很多方法,最常用的是把彻底稳定的实现移走。如果此部分实现通用性比较强,此时,封装基类是你不二选择。
在战斗系统之属性设计(一)中只说过属性,并没有说明属性的分类,但战斗系统中影响攻击的属性远不止一条,如下就有3个属性同时影响攻击力。
-- 动态属性
define.eDATT_AtkBase = 10 -- 基础攻击力
define.eDATT_AtkPercent = 11 -- 攻击力增幅
define.eDATT_AtkAppend = 12 -- 攻击力附加值
假设我们要在伤害公式中要获取攻击力,如果分别获取3种属性会对使用方很不友好,所以应尝试寻找一种方式,而这种方式在不同战斗系统中可能是不同的,所以应该具体问题具体分析。比如以使用环境作为分类条件,从静态配置中读取的为动态属性,BUFF系统中处理的也是动态属性,在伤害公式或UI中使用的则是真实属性。
真实攻击力=基础攻击力* (1 + 攻击力增幅 * 万分比) + 攻击力附加值,如下边代码中的攻击力和防御力。
-- 获取实时属性
function M:getRealAttribute(key)
-- 生命最大值
if key == define.eRATT_HpLimit then
local value = self:getDynamicAttribute(define.eDATT_Hp)
if value == -1 then return value end
local hppercent = self:getDynamicAttribute(define.eDATT_HpPercent)
local result = value * (