0
职业专栏
关闭生成文章|
galeocerdo 关注 发布时间: 2015-11-04 最后更新: 2015-11-10 9026 157
打印
分享
倒序查看
galeocerdo 3 认证玩家 签约作者 1# 最后更新 2015-11-10
更多 回复(157)
本帖最后由 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)

原时间 可以替换成 原帧数,你要的加速后时间的上一段加速后时间 可以替换成 你要的加速后帧数的上一段加速后帧数

评分

参与人数 1 +200 米币 +80 +1 +20 收起 理由
admin + 200 + 80 + 1 + 20 感谢分享!

查看全部评分

点击开关回复楼层
goodbay9999 13 4# 发布于 2015-11-04
更多 回复
阿苏大阿苏大阿苏大阿苏大阿苏大阿苏大
澄清 15 认证玩家 签约作者 5# 发布于 2015-11-04
更多 回复
lkjjkkkkkkkkkkkkkkkkkk
小小六神 13 6# 发布于 2015-11-04
更多 回复
数据大神就是叼,这么长,看都看不过来
weikisslong 14 7# 发布于 2015-11-04
更多 回复
dfsfsdfsdfsdfsdfdsfsfsdfsfda
zfy123 14 9# 发布于 2015-11-04
更多 回复
zfy123,如果您要查看本帖隐藏内容请回复,成为VIP会员全站资源免费下载,无需回复即可查看隐藏内容。
下一页 »
跳转到指定楼层
请先登录

试一试@用户名 立即召唤神龙 小伙伴会收到通知喔:)无需加好友即可通知到

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

关闭
您当前使用的浏览器版本过低,网站部分功能可能失效,请更换合适的浏览器。了解更多
快速回复 返回顶部 返回列表