战斗系统之属性设计(二)

本文探讨了战斗系统中单位属性设计,建议将稳定通用的实现封装到基类,以减少类的复杂性。文章指出,战斗系统中的属性影响因素多元,如攻击力受多种属性影响。提出了根据使用环境对属性进行分类,如静态配置、BUFF系统和实际战斗中的动态属性。以真实攻击力为例,介绍了其计算公式,并强调了特殊属性如生命值的变化同步问题。`M:changeDynamicAttribute(key, value)`函数用于处理属性叠加及验证,其在技能设计中的作用留待后续讨论。" 105590860,9301268,腾讯数据分析实习面试经验与问题解析,"['面试经验', '数据分析', 'SQL', 'Python', '机器学习']
摘要由CSDN通过智能技术生成

与单位具体实现隔离形成基类

我们经常看到一个单位类中包含属性、行为、控制等等的实现,最终的结果是此代码量异常的庞大。
为类瘦身有很多方法,最常用的是把彻底稳定的实现移走。如果此部分实现通用性比较强,此时,封装基类是你不二选择。

战斗系统之属性设计(一)中只说过属性,并没有说明属性的分类,但战斗系统中影响攻击的属性远不止一条,如下就有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 * (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值