首先,在第一个大风(在20帧产生的)提供的风刀增益在20帧+372帧=392帧后失去之前,额外伤害都是0,因 为在此之前不存在符合额外伤害定义的大风伤害。第一次额外伤害会从392帧开始产生,一直到12帧后的404帧结束。从404帧到392帧的一个大风周期 40帧后,多余的伤害都为0。接着然后重复12帧大风伤害,0的周期模式。因此额外伤害可以用跟帧数相关的函数来表示。额外伤害=stack(增益倍 数)*大风一帧的伤害*判断函数。判断函数是一个判断某一帧应不应该有额外伤害的函数,具体形式在进的分析会有讨论。 [4]现在,我们已经可以计算战斗过程中所有帧数的伤害了,用函数表示为:整体伤害=同步伤害+额外伤害。整体伤害在战斗开始后0帧到600帧的模式如下 图所示(X轴为时间/帧数,Y轴为武器伤害)
[5]因为战斗时间越长,战斗中后面周期性的伤害占比最高,所以计算20帧间隔的平均武器伤害,只要算出392帧后任意一个40帧周期的伤害均值即可。
2.组队输出模型的进阶分析
在获得具体20帧攻速间隔,战斗中所有帧数伤害以及风刀层数的判断公式之后,通过推导,我们可以归纳出对于所有攻速间隔都适用的通用公式,下面就是具体的推导过程以及附上我真实计算所用的公式组。
A.适用于所有攻速间隔,战斗开始后某一帧的风刀层数通用公式归纳 [1]首先我们观察由20帧攻速间隔得到的具体风刀层数公式: stack(风刀层数)=Floor[1+(帧数/20)];{帧数<392帧} stack(风刀层数)=Floor[1+(帧数/20)]-2*Floor[1+(帧数/40)];{帧数≥392帧} [2]可以发现分段情况是以第一次大风提供的增益层数消失为分界点,因为攻速间隔是20帧,所以第一次消失是发生在372帧(层数持续时间)+20帧(第 一次大风出现的帧数)。在这372帧+20帧之前,风刀的层数都是每隔一次攻速间隔增加一次的。由此归纳可得,假设人物的攻速间隔为X,在372帧+X帧 之前,风刀的层数是每X帧增加一层的,处于两次X帧之间的层数状态与前一次X帧的时候相同。用函数表示为:stackx(风刀层数)=Floor[1+ (帧数/X)] ;{帧数<372帧+X帧},其中Floor[1+(帧数/X)]这个也是风刀层数的获得函数。 [3]接着我们观察20帧攻速间隔下,392帧后风刀层数的变化模式。由上面我们可以知道,风刀层数增加的模式还是每隔20帧增加一层,但是现在风刀层数 已经不直接与风刀获得层数直接钩挂了,因为从392帧开始,我们就会周期性失去一个大风提供的风刀增益层数,每一帧的风刀层数应该是由获得层数和失去层数 共同计算所得。因为风刀层数失去的模式是跟产生一个大风的周期相同,所以在人物攻速间隔为X的情况下,失去风刀层数是间隔2X的周期函数。从20帧得到的 公式归纳,stackX(失去风刀层数)=2*Floor[1+((帧数-(372+X))/(2*X))]。所以,对应帧数≥X+372帧的帧数,风刀 的层数等于这一帧风刀获得层数减去风刀失去层数。函数形式为:stackx(风刀层数)=Floor[1+(帧数/X)]-2*Floor[1+((帧数 -(372+X))/(2*X))] 当{帧数≥372帧+X帧}[总结,适用于所有攻速间隔,战斗开始后某一帧的风刀层数通 用公式如下: stackx(风刀层数)=Floor[1+(帧数/X)];{帧数<372帧+X帧} stackx(风刀层数)=Floor[1+(帧数/X)]-2*Floor[1+((帧数-(372+X))/(2*X))];{帧数≥372帧+X 帧} B.适用于所有攻速间隔,战斗开始后的某一帧的实际伤害通用公式归纳 [1]知道层数的通用公式之后,我们就可以去归纳实际伤害的通用公式了。首先先建立风刀增益倍数的函数:stackx(增益倍 数)=1.5+stackx*(风刀层数)*风刀特效%。 [2]因为同步伤害部分是直接与风刀层数挂钩的,既然我们知道了风刀层数的通用公式,那么这么部分不需要任何调整,即可以计算所有攻速间隔下某一帧的同步 伤害了。函数形式为:同步伤害x=stackx(增益倍数)*(Floor[stackx(风刀层数)/2]*大风一帧的伤害+(stackx(风刀层 数)-2*Floor[stackx(风刀层数)/2])*小风一帧的伤害)。 [3]额外伤害部分唯一与攻击间隔挂钩的变量,是增益倍数和判断函数。在已经明确增益倍数之后,只要解决判断函数的部分,就能得到适用于全部攻速间隔情况 下的额外伤害。已知在战斗开始后第一个大风消失之前,额外伤害部分都是0。假如人物的间隔帧数为X,那就就是说在372帧+X帧之前,额外伤害都为0。所 以这就是判断函数的第一部分,当帧数小于372帧+X帧之前,判断函数直接等于0。然后,第一组12帧的额外伤害会在372帧+X帧之后开始产生。12帧 之后到下一个周期,也就是372+3X帧之前额外伤害都等于0。为了达到这样的判断效果,联合在372帧+X帧之前伤害等于0,我写了一组判断函数,如 下: 判断= -1*帧数 ; {帧数372 + X} 判断= ((帧数-(Floor[(帧数-(372+X))/(2*X)]*(2*X)+(372+X))) 判断0=If[0≤判断[帧数, X] <= 1, 1, 0] 绿色部分的作用是自动判断离你输入的帧数,最近的一个372+X的周期。然后用你输入的帧数减去这个帧数,如果/12,也就是在额外伤害的12帧周期内, 得到的数值就是0到1之间数字,否则就是大于1的数字,然后小于372帧+X帧情况,得到的数字全为负数。在此基础下,我们可以建立真正的判断函数,如果 判断0在你输入那一帧的数值不在0和1之间,判断函数的输出就是0,反之亦然。在这个判断函数的基础上,我们可以建立适用于所有攻速间隔,额外伤害部分的通用公式:额外伤害X=判断0*大风一帧的伤害*stackx(增益倍数)。[4]至此,我们已经得到了适用于所有攻速间隔,计算开始战斗后某一帧的伤害的公式:伤害X=额外伤害X+同步伤害X。我们也可以分析所有攻速间隔的伤害,收益和其他的数据。
小编推荐阅读