一切属性均为属性
在战斗系统中,包含不同种类的属性。
比如:血量、攻击力、防御力、暴击率、格挡率、格挡系数等常规属性
再如:是否被眩晕、是否物理免疫、是否无敌等状态属性
三如:标记死亡、标记出生、技能CD缩减等逻辑属性
四如:当前位置、召唤者、召唤单位等对象属性
我们在常规的设计中往往只对常规属性做统一处理,部分也会统一处理状态属性,但很少的会把其他的属性也纳入进来。在此,我们不讨论对错,只对比2者的实现便捷性。
单独管理
local M = cclass("PropertyObject", import(".tableobject"))
function M:ctor()
self._isBorned = false
end
function M:getBorned()
return self._isBorned
end
function M:setBorned(borned)
self._isBorned = borned or true
end
统一管理
define = {}
define.eDATT_Borned = 501 -- 是否已经出生完毕
local M = cclass("PropertyObject", import(".tableobject"))
function M:ctor()
self._dynamicAttributes = {}
end
function M:getDynamicAttribute(key)
return self._dynamicAttributes[key] or 0
end
function M:setDynamicAttribute(key, value)
self._dynamicAttributes[key] = value
end
当只有一个属性时我们看上去好像统一管理的更复杂,这时我们再加一个属性看看结果。
单独管理
local M = cclass("PropertyObject", import(".tableobject"))
function M:ctor()
self._isBorned = false
self._isDeaded = false
end
function M:getBorned()
return self._isBorned
end
function M:setBorned(borned)
self._isBorned = borned or true
end
function M:getDeaded()
return self._isDeaded
end
function M:setDeaded(deaded)
self._isDeaded = deaded or true
end
统一管理
define = {}
define.eDATT_Deaded = 500 -- 角色已死亡
define.eDATT_Borned = 501 -- 是否已经出生完毕
local M = cclass("PropertyObject", import(".tableobject"))
function M:ctor()
self._dynamicAttributes = {}
end
function M:getDynamicAttribute()
return self._dynamicAttributes[key] or 0
end
function M:setDynamicAttribute(borned)
self._dynamicAttributes[key] = value
end
显而易见,统一管理的方式只加了一行定义而已,这时有的看官会说你默认值不是true/false、但是我们用if ins:getDynamicAttribute(define.eDATT_Deaded) > 0 then end语句判断也是可以的嘛,并且能使我们的代码更内聚,代码量更少,何乐而不为!
版权声明:本文为Feng0_0zi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。