本帖最后由 galeocerdo 于 2015-11-10 12:51 编辑
本文参考了
http://www.jx3pve.com/thread-5361-1-1.html,非常有用的东西,非常感谢一风
不过文里虽然给了公式但是没有清楚解释公式背后原理(尤其是向上取整那部分),我在尝试自己从零建立加速公式的时候遇到理解上困难,在这里写下了解决的思路
假设你有一个技能,你只知道这个技能的原本间隔时间,然后其他的都一无所知,而这个帖子将演示如何从一无所知直到知道所有段位的加速等级
以破风为例子
第一步:找出最高加速段位
破风2秒一跳,加速最高是25%,所以2/1.25 = 1.6,1.6*16 = 25.6,由于帧数必须是整数,所以最快可以加速到25帧,原帧数是2*16 = 32,所以总加速段位 = 32-25 = 7 (不包括0段)
注:1帧 = 1/16秒
第二步,找出各个加速段位的间隔
得知至高段是7段(1-7)使用【原伤害间隔 - 加速段位/16】的公式
第一段 1.9375秒
第二段 1.875秒
第三段 1.8125秒
第四段 1.75秒
第五段 1.6875
第六段 1.625秒
第七段 1.5625秒
系统处理加速的时候是使用一个叫做加速值的数值,加速值必须先转换去加速率再转换去加速等级
由于帧数必须是整数,向前或者向后过程中需要向上或者向下取整
示例,假设你想找破风的第六段加速所需要的加速阈等级
在找之前你必须要先明白下面的概念
得知加速率是让你可以从【原帧数内打出1次伤害】变成【原帧数时间内打出1+加速率次伤害】
比如破风本来2秒打一次,如果你有最高加速,最高加速的破风是1.5625秒,2/1.5625 = 1.28,意思说破风最高能快到原本1.28倍的速度
也就是说本来2秒跳1次伤害,变成2秒跳1.28.次伤害,或者1.5625秒跳1次伤害
破风最快可以到28%,可能你觉得与加速最高的25%有冲突但其实不是,面板的%其实主要是来代表了加速值有多少而已,并不直接反映技能本身加快了多少,技能最快可以加到本身的1.33333倍
*因为有帧数向下取整的存在,所以对该技能而言能打出的是比1+加速率实际更高一点点,这里有名词歧义,所以请不要混乱
虽然面板的%最高可以到25%,但是因为帧数求整关系,所以据我所知是很难想象有技能可以刚好卡准准25%的,破风的话最高是23.14%
前面说到系统处理加速是使用一种叫做加速值的东西,所以现在讨论的是加速值
例子里面说明了28%就是让技能快了28%,频率是原本的1.28倍
加速值与这个加速率的关系正比的,加速值越大,加速率越大,加速值越小,加速率越接近0(越与原帧数一样)
关系是 加速率 = 加速值/1024,所以如果加速值是0,那么频率就是原本的1倍,也就是原帧数,而由于加速率最高到25%,所以加速值最高是1024的25%,也就是256。至于为什么是1024,我不清楚,但是应该跟电脑计算的二进制天性有关。
当然你看到这里你就会说,我们知道加速率就可以了啊,因为我们都知道怎样算正确的帧数,也知道加速率转换加速等级的新系数是4717.425,可以直接算出加速等级了,为什么还要看加速值。
这是因为加速值和帧数一样,必须是整数,换句话说,从其他数值转换去加速值是有个向下取整/向上取整的过程,而影响这个取整角度的是1024这个系数
整个大图关系就是
1+加速等级/47.17425 = 1+加速率 [=] 加速值/1024 + 1[=] 原帧数/加速后帧数 = 原时间/加速后时间
如果要找出七段加速破风所需要的阈等级
第三步
写出第一个等式
加速值/1024 + 1= 原时间/加速后时间 或者 加速值/1024 + 1 = 原帧数/加速后帧数 都可以
加速值/1024 = 原时间/加速后时间 - 1
加速值 = (2/1.5625 - 1)*1024 = 286.72
你看到这里一定觉得很奇怪了,因为前面说了,加速值最高只是256,但是为什么会算到286.72?
这是因为帧数是向下求整的,而加速值是与帧数形成反比的,
说明286.72实际上是最高的加速值需求而不是最低的需求,这数值再多一点点,就是下一段加速的阈值。
我们追求的是最低需求,所以为了解决这个问题,我们就找出比这个加速段位更低一等的加速段位的加速值,比如现在算第七段,那么就当做第六段的来算
然后在这个值上,加多数值就可以了
所以,
加速值 = (2/1.625 - 1)*1024 = 236.307
由于我们只需要比这个数值更多一点点而已,而刚好加速值只能是整数,那么我们就向上取整
得出237
如果一开始取到的是整数呢?(照理说除了0之外很难会算到其他整数)
这样的话,很简单,你就加1好了,你不能加小数点,因为加速值必须是整数
第四步
1+加速等级/4717.425 = 加速值/1024 + 1
加速等级 = 4717.425*237/1024 = 1091.825
因为从加速等级转换去加速值是向下取整的,所以现在反过来是要向上取整
所以答案是1092
至于若是得到整数要怎样处理?
虽然还是很难想象会得到整数(因为4717.425/1024*加速值,无论加速值是多少(从0到256),都应该不会得到整数了)
如果得到整数,因为整数不进行向下取整,自然反过来也不会进行向上取整,所以不必处理
==================================
得出第七段加速阈等级 = 1092
主要内容写完了,你们可以找出破风其他六个加速段位的加速等级,再回复看答案
VIP会员 - 免回复查看隐藏内容
一段 = 向上取整(特殊向上取整((2/2-1)*1024)*4717.425/1024) = 5,因为(2/2-1)*1024 = 0 是整数,所以这里的向上取整后再加1(特殊向上取整)
二段 = 向上取整(特殊向上取整((2/1.9375-1)*1024)*4717.425/1024) = 157
三段 = 向上取整(特殊向上取整((2/1.875-1)*1024)*4717.425/1024) = 318
四段 = 向上取整(特殊向上取整((2/1.8125-1)*1024)*4717.425/1024) = 489
五段 = 向上取整(特殊向上取整((2/1.75-1)*1024)*4717.425/1024) = 678
六段 = 向上取整(特殊向上取整((2/1.6875-1)*1024)*4717.425/1024) = 876
整理:
一:5
二:157
三:318
四:489
五:678
六:876
七:1092
最低加速等级需求直接公式:向上取整(特殊向上取整((原时间 / 你要的加速后时间的上一段加速后时间-1)*1024)*4717.425 / 1024)
原时间 可以替换成 原帧数,你要的加速后时间的上一段加速后时间 可以替换成 你要的加速后帧数的上一段加速后帧数