谈谈战斗力【二】——暴击、穿透与减法公式
导语:注意到在HADa体系里,一开始的假设即默认“防御低于所受攻击,即攻击必定产生伤害”。在仅有防御的前提下这一问题还不算太突出,因为仅有防御一个限制,在设计时就可以尽量压缩防御值的大小避免这种情况——然而当 注意到在HADa体系里,一开始的假设即默认“防御低于所受攻击,即攻击必定产生伤害”。在仅有防御的前提下这一问题还不算太突出,因为仅有防御一个限制,在设计时就可以尽量压缩防御值的大小避免这种情况——然而当引入穿透后,事情乱套了: 如果角色A拥有5点防御,但B拥有10点穿透和10点攻击,按照上面的公式,伤害似乎应该为: ![]() 然而实际上,10点穿透打在5点防御上,意味着这10点穿透中有5点是溢出的。换言之,实际上的伤害应该为: ![]() 这便是问题的根源了。 当然看到这里,这时候有人一定会觉得“那就把穿透也设置得更小,避免这种溢出的情况就可以了嘛”。然而防御值上限已经被压缩的情况下,继续压缩穿透值上限,穿透对玩家的提升就实在太小了。另外还有一个问题——穿透值有溢出的可能而攻击力没有,同样提升的前提下(穿透或攻击增加一点,在不溢出的情况下反映到伤害上都是增加一点伤害),为什么我要去提升穿透呢?直接攻击一路碾过去岂不是更简单粗暴? 这种情况下,穿透就处在了一个很尴尬的位置,相当鸡肋没有什么重要性,但凭空多的这个数值又会分散玩家的注意力,且投入很可能没有收益(比如穿透数值已经比其他角色的防御高的情况下,再投入穿透并不会增加玩家在实际战斗中的优势),而玩家加点尝试发现穿透的问题后,大概率又要回头来喷策划…… 这便是减法公式和乘法公式的根本问题了…… 当然,这个我会放在下一小节讨论,这里还是先给出考虑穿透情况下的公式: ![]() 减法、乘法与除法公式,以及乘法公式下的防御 简而言之,两者最主要的差别在于: 减法公式很容易产生负数,而乘法公式的本质确保了负数很难出现。 原因很简单——诸如伤害计算,防御判定等内容如果用减法公式做,就必然会涉及减法,而初中数学已经告诉我们,两个正数相减,结果可以是正,也可以是负。 负数是一个很烦人的东西。仍然以防御为例——角色A攻击50,角色B防御60,假如我们在一开始的伤害部分偷懒没考虑到溢出的情况,战斗的结果就会变得匪夷所思——A打B,B不仅毫发无伤,随着A的攻击反而一点点奶回来了。这种情况下该怎么写一个稳定的计算公式?毕竟公式不是代码,不可能套几个if或者switch就扔那里不管了。这也是为什么一些策划对减法公式避之不及的原因。 而假如我们把防御变成“抵消20%的伤害”,A攻击B,伤害则变成了40。如果A的攻击变成了5,依然能造成4点伤害。无论A的攻击有多低,其攻击力也必定大于0。原因就在于两个正数相乘结果必然为正。乘法公式正是靠着这个特性规避了负数的出现。 另有一种公式,也是我刚才闲着无聊谷歌翻出来的——除法公式,最简单的形式下,它定义伤害为: ![]() 此时战斗力公式为: ![]() (编辑:D游戏网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |