暗黑3野蛮人攻速讨论:Thinking In IAS
新闻导语
我所说的很多东西,都是基于假设,测试结果接近也不能说明他就一定是对的,未必可靠,只有官方说的才可靠。
先打个招呼,本文比较长,而且有点枯燥,但如果你愿意认真耐心的读完,应该不会觉得后悔。
一 前言
假设一种情况,配装时整体基本配好了,还差个头盔。看到两个暮光头,买哪个?
一般情况下攻速高的这个会贵一些,有时候差的还挺多,好几E。
于是我经常看到有人会问一个问题:“多1%攻速到底有多大差别?”,这个问题看上去很简单,攻速更高意味着单位时间可以打出更多次伤害,意味着更高的DPS,一些模拟器也会告诉我们,提升1%攻速会提升多少DPS。
对于“多1%攻速到底有多大差别?”这个问题,我们考虑的重点是“多大”这两个字。但在这之前,我觉得应该先考虑一下“有”这个字,因为如果”没有 “差别,还谈何”多大”呢。这在很多人看来有些多余,差别很清晰啊,9%>8%么。实际并不是这么简单,我可以先给出答案,对某些人来说,戴这两个暮光头没有差别,不是很小小到忽略不计,而是没有;对另一些人来说,差别会比较大,至少比1%大。简单来说,两个头盔之间是>=的关系,头盔只是个例子,其他装备也都一样。
本文主要讨论为甚么有时多1%攻速有变化,有时没变化这个问题。
纠正下,上面那句话我发现引起了一些误会,暮光头的1%我只是作为开场白举个例子,讨论的范围不是只限与1%,实际你可能差5% 7%,都会没变化。
二 一个对比测试
可能有人不太相信我前面说的答案,先来看一个测试:有3个攻速:A 2.25,B 2.28,C 2.31。
问在这3种攻速下,持续打一个目标5分钟,攻击次数会相差多少?根据以往的经验我们知道,攻速代表每秒的攻击次数,攻速2.25就是一秒打2.25下,5分钟=300秒,那么A会攻击2.25*300=675次,B会有684次,C会有693次。C比B多9次,B比A多9次。 理论上看,应该是这样的。
但我的结果是:A 688次; B 715次;C 715次。B比A多了27次,远大于计算的9次,而B和C则是完全相同。这个现象和我前面说的头盔是一样的,同样是多0.03攻速,有可能在攻击次数上产生很大变化,也有可能完全无变化。
由于这个结果可能比较出乎意料之外,有必要交代一下我的测试环境:攻击对象是A3 10MP罪恶之心,这东西不会动不会反抗,很稳定。
计时我用的是视频,都上传了,有兴趣的可以下载,从第一击抬手的那个画面开始,往后走300秒,然后截断视频,这样从攻击开始到视频结束就是5分钟整,我只需要去统计这段时间打了多少下。我的工具可以精确到秒的小数点后面两位,所以这个300秒是比较精确的,误差最多在0.1秒左右,由这个误差导致多一次少一次是可能的,但不会更大了。肯定不会把9次的差别给吞食掉。
计数有很多办法,可以数攻击动作,可以数跳出来的数字。在实际测试中,我发现这两种办法都不靠谱。数跳出来的数字太难,一秒几个数字,一屏幕好多数字,根本分不清哪个是新出来的。
攻击动作是一个固定的频率,人在数固定频率的时候,会在心里形成一个默认频率(你会发现闭上眼睛也能数下去),在频率很高并且需要数很久的情况下,一段时间后这两个频率会产生交叉,你都搞不清自己是在跟着眼睛数还是在跟着心数,这样就是乱掉了。可能清醒的人还好一点,我这几天一直对着这坨肉,感官已经有点紊乱了,真数不清。退一步说,即使不乱,我数完一遍688次,我怎么知道我没数错?再数一遍,数出来689次,不一样,怎么办,哪次是对的?再数一遍,687次,又不一样,完了,难道要数100遍取平均值?一遍5分钟啊!所以,“我很认真的数了几遍,数出来是几”这样的做法是没说服力的,数的时候很容易数错,数完了也没有办法验证对错。
我现在用的办法是根据结束时目标血量来算出攻击次数。测试时我的武器,右戒指,项链是这样的:
再穿9速的殷娜,拉库尼,暮光,以上这些东西不动。
然后依次使用下面3个戒指做左戒指,每个多2%攻速:
这样,就能分别得到2.25 2.28 2.31这3个攻速,同时我的DPH被饰品上的最小值属性抬升到固定的98-98,不会浮动,爆伤和力量也是固定的,这样我打出来的数字就是固定的,暴击是3579,不暴击是2105。根据视频结束时目标的血量,可以计算出他掉了多少血,关闭白字,只显示黄字,我只要数5分钟内有多少次暴击就行。非暴击次数可以用(总损血量-黄字次数*3579)/2105算出来,然后将数出来的暴击次数和算出来的非暴击次数相加,就是总共攻击了多少次。
这个办法是比较靠谱的,我把爆率控制的很低,只有10%左右,所以黄字的出现的不多,而且不是固定频率,过一会跳一个数字出来,这样就很不容易数错。数完后,我需要用他去做计算,这本身也是个检验的机会。如果用他算出来的非暴击次数正好是个整数,那么说明没有数错,如果算出来是XXX.4 xxx.7这样的,那就说明数错了。
以2.25攻速为例,在视频结束时,目标剩5985486血,他满血是7550477,我打掉了1564991血,5分钟数下来造成79次暴击,那么非暴击次数=(1564991-79*3579)/2105=609.14=609。 609+79=688次,这就是结果。
另外,609.14看上去不是很整,是不是数错了?解释下,我们看到的数字,包括跳出来的数字和怪物的血量,都是整数,但实际在每次判定伤害和损血时是会计算小数的,仔细观察会发现有比如跳了数字100,但怪掉了101血这种现象,这是之前小数位累积起来的结果,所以更准确的应该用小数去计算。
测试中我的力量是1202,爆伤70,DPH98,用的165%伤害猛击,可以计算出:
不暴伤害=98*13.02*1.65=2105.334, 暴击伤害=2105.334*1.7=3579.0678,用这两个数字代入计算会更准确。
这个问题不会影响到次数统计,因为打若干次实际损血只比显示的差1,一次伤害就有几千,这些细微的偏差几百次累积起来也远小于一次攻击的伤害,所以他不会造成多一下或少一下的偏差。
这是3次测试的结果:
攻速 | 总伤害 | 暴击次数 | 非暴击次数 | 总次数 |
2.25 | 1564991 | 79 | 609 | 688 |
2.28 | 1620366 | 78 | 637 | 715 |
2.31 | 1555532 | 34 | 681 | 715 |
三次测试的视频,视频是60帧采样的。如果你有兴趣,可以下载下来仔细研究,百度盘: 2.25 | 2.28 | 2.31
说了这么多还没有进入正题,一直在说测试环境,一些细节和我的想法。因为一方面,只有以可靠的测试结果来做为依据,才能进一步去分析一些原因,得出一些结论。另一方面,最终我碰到了一些问题没解决,所以我想把整个过程中我的想法和做法尽量详细的写出来,这样可以让别人帮我看看问题出在哪里,所以后续还是会很详细。
好了,言归正传。这组对比测试的主要目的是引出一个现象:替换5% 7% 9%,这3个带攻速的戒指,每次提升2%攻速,你可能会增加很多的攻击次数,也可能完全没有任何变化。说明攻速不是提升一丝就有一丝变化的,他的变化不是连续的,是跳跃的。必须提升到足够的数量,才会发生变化。
我们以前会以为攻速的变化是连续的,就算只多给0.01攻速,只要给一个够长的时间,比如100秒后,就会多一次攻击。通过这个测试,以及我接下去想说明的是:很可能多给0.01攻速,不管你打多久,300秒,还是600秒,都不会多打一次。
有了这个现象,接下来我们寻找原因和规律。
三 从小旋风跳数说起
0.90-1.00 攻速 = 9 跳
1.01-1.11 攻速 = 10 跳
1.12-1.17 攻速 = 11 跳
1.18-1.32 攻速 = 12 跳
1.33-1.43 攻速 = 13 跳
1.44-1.53 攻速 = 14 跳
1.54-1.665 攻速 = 15 跳
1.67-1.815 攻速 = 17 跳
1.82-1.995攻速 = 18 跳
2.00-2.22 攻速 = 20 跳
2.23-2.4975 攻速 = 23 跳
2.50-2.8512 攻速 = 26 跳
2.86-2.98035 攻速 = 30 跳 3.3333
这张表是冲刺小旋风跳数和攻速的关系,大部分人都很熟悉这张表,从这里开始讲,因为他的产生过程和我前面提到的现象在原理上是一样的,顺便也正好对这个表做一下解释。
其实很长一段时间,我对这个表是不太认可的,为甚么左边的攻速都是这些奇葩的数字,为甚么右边的跳数随着数值的增长开始变的不连续,不能有19跳吗?各种疑问,甚至一度认为他是错的,实际在论坛上也确实流传着一些有细微错误的版本。我以前一直认为:“尾气没有这么复杂。如果一个技能写造成XXX% 武器伤害,代表他每秒攻击攻速次,每秒XXX%*攻速*DPH的伤害,猛击,先祖都是这样,尾气也一样,区别只是,尾气的60%不是一次产生,是拆分成3 个20%来产生,于是每跳20%DPH,每秒就是攻速*3跳,3秒就是攻速*9跳”。 我一直觉得我的想法比这个表更合理,但实际对错还是要通过测试来说明
测试时的攻速:1.98 | 2.01 | 2.04(可以下载我的测试视频)
测试方法还是和前面一样的,通过把伤害值调成固定,根据目标的损血来计算伤害次数,为了凑这个攻速我更换了一些装备,不暴伤害变成213 暴击362,结果:
攻速 | 总伤害 | 暴击次数 | 非暴击次数 | 总次数 |
1.98 | 4430 | 4 | 14 | 18 |
2.01 | 4260 | 0 | 20 | 20 |
2.04 | 4558 | 2 | 18 | 20 |
按照我以前的想法,在2.01攻速时,跳数=2.01*9=18.09,应该是18或者19跳,实测结果是,当攻速跨过2.00后,直接从18跳突变到了20跳,没有19跳这个过程,这与表格是相符的。说明我以前的想法是错的,表格才是对的。
验证了他的正确性后,开始找原因。
很多人是从这个帖子看到的这张表: 1.04无限双旋风传奇级攻略 ,基本上每个玩双旋风的玩家都会看过这个帖子,但该贴并没有解释这张表为甚么是这样,只是提到摘自“午夜镇魂曲”的帖子
午夜镇魂曲的帖子还是没有解释为甚么,只是提到摘自“蛮子一桶浆糊”的帖子,论坛搜索这个ID,还好他只发过2帖,有提到这张表,但依然没有解释为甚么,也没写转自哪里,于是,线索断了。还好,在浆糊的帖中,我发现他列的这张表中的单位是用英文写的,说明,他很可能是转自国外某网站,并且没有经过修改。
在这个贴中,作者终于非常详细对这个表做了解释,原帖是英文的,我简单讲下:D3中有一个最小时间单位:帧,Frame,下文简称F,他的长度是1/60秒,每一秒游戏固定由60个F组成,这些不会变。
作为最小时间单位,他不可分割,不会出现0.5F这种东西。D3中的各种动作,都会占用一段时间,由于F是最小单位且不可分割,各种动作占用的时间就必须是F的整数倍,一个动作可以占用10F的时间,如果要快一点,他要么变成9F,要么变成8F,无法变成8.5或者9.875F这种。
冲刺的小旋风的每一跳也是一个动作,他也会占用一定的时间,这个时间一定是F的整数倍,即NF,N是整数。一个小旋风持续3秒,3秒=180F,每一跳的时间是NF,那么3秒内的跳数=180F/NF=180/N,由于N必须是整数,当他等于9的时候,180/9=20,当他等于10的时候,180 /10=18。这就是为甚么不会有19跳的原因,因为小旋风一跳的时常要么是9F,要么是10F,无法是中间的某个值。同理,我们可以算出当N等于 1,2,3...时的跳数,都是180/N。比如在某个攻速下小旋风每跳的时间是5F,那么3秒就有180/5=36跳。
N的取值是怎么确定的呢,是由攻速决定的。N与攻速的关系是怎样的呢?在前面我的错误设想里有提到过,我认为跳数=攻速*9,实际上这个想法在理论上是正确的,或者可以说是设计师的本意。我们还刚推出了,跳数=180/N,于是180/N=攻速*9,N=20/攻速。造成我的想法产生偏差的原因,是因为F已经是最小时间单位,无法再分割,于是N必须是整数,当用某个攻速比如2.1,代进去得到的N不是整数,20/2.1=9.524。然后用一个不是整数的N去计算跳数,自然也就得不出正确的跳数,因为实际上不存在9.524F,要么9F,要么10F。
当在指定攻速下算出来的N不是整数时,N会向下取整。道理是这样的:比如2.0攻速时N=10,当你的攻速比2.0快一些的时候,必须快到足以使N 变成下一个整数才有用,否则没变化。下个整数是9,对应的攻速是20/9=2.22222,如果你的攻速比2.0高,比如2.1,但每达到2.2222,那小旋风每跳的时间消耗就降不到9F,还是10F。2.1时每跳的帧数就是用20/2.1=9.52,向下取整变成9得到的,跳数就是用180/=20得到的,这就是这张表的产生方式。
掌握了这个原理后,即使找不到这个表格,我们也能自己算出各个攻速临界点,这些临界点就是使20/攻速等于整数的点。对应的攻速和跳数分别为:
帧数 攻速 跳数
5 20/5=4.00 180/5=36
6 20/6=3.33 180/6=30
7 20/7=3.86 180/7=26
.......
15 20/15=1.33 180/15=12
.....
等等,依次可以自己计算,我就不贴全表了,需要的可以去原帖查阅,我觉得自己学会算更好,可以帮助理解,或者发现一些错误,比如前面贴的那一段表中最后一行的30跳就有问题,不是2.98035,应该是3.3333。 运用前面的知识,要30跳,意味着N=180/30=6,即小旋风每跳的时间是6F。N=6时的攻速节点应该是20/6=3.3333.N=7时的节点是 20/7=2.857,所以最后一行应该是2.857-3.333,在国外的原帖中,这已经修改了。
这并不是小旋风的特例,很多一次攻击被分成若干次来判定的技能都是这个原理,比如DH的连射等。
关于冲刺小旋风跳数与攻速的关系就说到这里这部分不是重点,我讲这些主要是为了通过这个大家都比较熟悉的东西引出Frame(F)这个概念,然后再看看这种原理是否对其他更多的技能有效。
四 关于Frame
D3中最小的时间单位称为一个Frame(帧,F),一秒=60F,1F=1/60秒,F不可分割。
先说一下他与我们平时说的帧数的区别。不管你的CPU,显卡等等性能如何,游戏总是固定的每秒生成60F。他与我们平时说的玩XX游戏多少帧比如在游戏里按CTRL看到的数字(我称他f,或者fps)不是一个概念,F是游戏生成的次数,f是显卡捕捉到的次数。F是恒定的,只要是玩D3就是一秒 60F,不会变;f是变化的,他取决于电脑性能。我们平时只能通过显示器来看游戏,所以在感官上我们只认识f,但真正在背后决定游戏运行方式,动作长短的,是F.
打个比方,F是一个隐形人在跳绳,稳定的一分钟跳60下,f是拿着一个能拍到隐形人的相机在对他拍照,我们看不到隐形人但能看到照片。相机可以拍的快或慢,f的数值也就可以变化,可以一分钟拍120张,也可以一分钟拍15张,但不管拍到几张,这个隐形人实际总是每分钟在跳60下这与相机是无关的。F 是固定的。f高,只是不会错过他的某一跳,f低,比如只有15,就会漏掉很多跳没拍到,这样看上去动作就不连贯,就是所谓的卡。
本文中一直会说到的1F,代表的不是一个画面,代表的是1/60秒的时间,他是一个时间计量单位。比如我说一下猛击8帧,意思不是他需要8个画面,意思是他需要8*1/60秒的时间。
我在这里引入了Frame这个概念,其实他对一个D2老玩家来说并不新鲜,这个系统不是在D3开始的,在D2时就有了,并且是大多数D2玩家所熟知的,因为当时所有的配装核心就是围绕F。这里顺便多说一些D2中的Frame,因为我不确定D3中是怎样,但很确定D2里是怎样,通过描述他在D2中的运作方式看看这套机制是否能搬到D3中。
D2的1秒是由25个F构成,1F=1/25秒。他的工作方式是这样的:一个动作固定会占用一定的时间,这断时间必须是F的整数倍。动作会有很多种,比如攻击,施法,格挡,硬直,都是不同种类的动作。会有专门的属性来加快动作的频率,缩短每次动作的时间,比如快速攻击(IAS),快速施法(FCR),快速格挡(FBR),快速打击恢复(FHR)等等。可惜的是,在D3中,这套系统已经被极度简化了,施法和攻击合并了,格挡不需要时间不是动作了,硬直被取消了。只剩攻击这一个动作和攻速这一个属性。(这些东西可以参考凯恩百科中breakpoint这个词条)
动作之间是一个序列的关系,不能同时做几个动作,必须做完一个再做下一个。想在单位时间内做更多动作,唯一的办法就是缩短每次动作的时间。动作的时间缩短是跳跃的,只能从N*F变成(N-1)F,没有中间量,这也就决定了用来改变动作时间的属性比如IAS,FCR这些,也只能是跳跃的,要使一个动作减少1F,必须堆积一定量的属性,不够量,则无效。
在D2中,由于没有面板攻速可以看,所以人们谈论速度问题时,更多的是直接说F,"你的亚马逊攻速是多少? " "10F"。这在当时的交流中是非常常见的,没有人会说X.XX。10F这代表射一箭,从抬手到射出去,到手放下来这个完整动作,需要10个F的时间,D2中一秒是25F,那一秒就可以射25/10=2.5箭,相当于现在的2.5攻速。如果你想提高攻击频率,可以增加IAS属性的数值,使他达到 9F。不同的武器需要的数值不一样,比如九头蛇弓(风之力),基础攻速是15F,要达到10F需要60ias,9F需要90ias,如果你现在是 60ias 10F,要提高到9F需要再堆30ias,如果达不到90。那么75也好,80也好,都没用的,和60完全一样,还是10F。
D2是这样,我现在关心的是D3是否也这样,前面我们已经通过小旋风攻速跳数对应关系表说明了Frame机制在D3中是存在的,至少对小旋风这个技能是适用的,那么接下去要看看这个机制是否对其他技能全面适用,比如猛击,因为猛击适用的话,那么可以想象很多技能,先祖啊甚么的,应该就都适用。
五 提出假想
我先假设猛击也和D2中的一次攻击一样,他从抬手到伤害判定,到手放下来这一个周期我称他为一个动作,在引入Frame的概念后,动作周期我不再用秒来表述,全都用F,因为F是最小单位不可分割,所以一个动作的长度必须是整数个F。
假设一次猛击需要60F,一秒有60F的时间,意味着一秒可以打60/60=1下,即攻速=1.0
假设一次猛击需要30F,一秒可以打60/30=2下,即攻速=2.0
以此类推,我们可以得出,当单次猛击耗时等于不同的F时,需要的对应攻速是多少。做出一张单次猛击攻击动作时间,与攻速的对应表:
帧数 | 攻速 | 1分钟攻击次数 | 帧数 | 攻速 | 1分钟攻击次数 |
60 | 1.000 | 60.00 | 30 | 2.000 | 120.00 |
59 | 1.017 | 61.02 | 29 | 2.069 | 124.14 |
58 | 1.034 | 62.07 | 28 | 2.143 | 128.57 |
57 | 1.053 | 63.16 | 27 | 2.222 | 133.33 |
56 | 1.071 | 64.29 | 26 | 2.308 | 138.46 |
55 | 1.091 | 65.45 | 25 | 2.400 | 144.00 |
54 | 1.111 | 66.67 | 24 | 2.500 | 150.00 |
53 | 1.132 | 67.92 | 23 | 2.609 | 156.52 |
52 | 1.154 | 69.23 | 22 | 2.727 | 163.64 |
51 | 1.176 | 70.59 | 21 | 2.857 | 171.43 |
50 | 1.200 | 72.00 | 20 | 3.000 | 180.00 |
49 | 1.224 | 73.47 | 19 | 3.158 | 189.47 |
48 | 1.250 | 75.00 | 18 | 3.333 | 200.00 |
47 | 1.277 | 76.60 | 17 | 3.529 | 211.76 |
46 | 1.304 | 78.26 | 16 | 3.750 | 225.00 |
45 | 1.333 | 80.00 | 15 | 4.000 | 240.00 |
44 | 1.364 | 81.82 | 14 | 4.286 | 257.14 |
43 | 1.395 | 83.72 | 13 | 4.615 | 276.92 |
42 | 1.429 | 85.71 | 12 | 5.000 | 300.00 |
41 | 1.463 | 87.80 | 11 | 5.455 | 327.27 |
40 | 1.500 | 90.00 | 10 | 6.000 | 360.00 |
39 | 1.538 | 92.31 | 9 | 6.667 | 400.00 |
38 | 1.579 | 94.74 | 8 | 7.500 | 450.00 |
37 | 1.622 | 97.30 | 7 | 8.571 | 514.29 |
36 | 1.667 | 100.00 | 6 | 10.000 | 600.00 |
35 | 1.714 | 102.86 | 5 | 12.000 | 720.00 |
34 | 1.765 | 105.88 | 4 | 15.000 | 900.00 |
33 | 1.818 | 109.09 | 3 | 20.000 | 1200.00 |
32 | 1.875 | 112.50 | 2 | 30.000 | 1800.00 |
31 | 1.935 | 116.13 | 1 | 60.000 | 3600.00 |
这个表是有偏差的,后文会再修正,不用在意他的具体数值是否精确,我们主要是看他的规律。我的假想是,直接决定单位时间内攻击次数的,是每次猛击的帧数,先借用这张不太准确的表里的数据打比方。
1分钟有3600F,如果一次猛击NF,攻击次数就=3600/N。比如一次猛击的时间是31F,那1分钟就打出116下,想再快一点,猛击的耗时只能从31F降到30F,那就打出120下,不管我们怎么微调攻速,打不出118下,就像小旋风不会有19跳一样。 虽然我们可以搭配出很多很多种攻速,100个蛮子有100种攻速,但他们站着打10分钟,打出的攻击次数只会有60种。
我们通常认为直接决定单位时间攻击次数的就是攻速,两者是联动的,攻速*时间就是次数。但在这个假设中,不是这样。攻速不是直接决定攻击次数,根据这个表,如果攻速从1.90提高到1.92,只要不超过1.935,每次猛击还是32F,每分钟还是112.5下,没有变化,多0.02的攻速不会使你在 60秒内多打1.2下。 攻速直接影响的是每次猛击的耗时,攻速的改变必须达到一定的量,超过某个具体数值,使得每次猛击的帧数发生了变化,单位时间的攻击次数才会发生变化。我称这些需要达到的具体数值为断点,或者阀值。
这就能解释第一个对比测试中,先加2%攻速多了27次,再加2%攻速完全无变化这个现象了。因为第一个2%攻速正好使得攻速越过了断点,1次猛击的帧数减少了1F,而第二个2%攻速的提升没有越过断点,帧数没有改变,攻击次数就不会有改变,不管是打5分钟还是10分钟,平均每分钟的攻击次数都不会有变化。
如果这个假设是成立的,那么我们平时选择装备时,在考虑要不要花钱去多买1% 2% 3%攻速时,就需要考虑下这个提升能不能使你的攻速越过断点,如果越不过,就没任何变化,这个钱就是白花的。如果能越过断点,那么这个提升就是有意义的,有价值的。
六 更多测试数据
为了验证这个假设,单靠一组对比测试是不够的,我还做了一些测试。
攻速 | 伤害 | 暴击 | 非暴击 | 1分总次数 |
1.710 | 115940 | 10 | 95 | 105 |
1.740 | 120156 | 10 | 99 | 109 |
1.770 | 119629 | 11 | 97 | 108 |
1.980 | 227580 | 8 | 116 | 124 |
2.010 | 234957 | 14 | 110 | 124 |
2.040 | 238293 | 11 | 117 | 128 |
2.862 | 563609 | 12 | 167 | 179 |
2.898 | 567820 | 14 | 165 | 179 |
2.934 | 548870 | 5 | 174 | 179 |
3.024 | 621117 | 18 | 168 | 186 |
3.060 | 610830 | 15 | 171 | 186 |
3.096 | 603972 | 13 | 173 | 186 |
2.250 | 1564991 | 79 | 609 | 688/5=137.4 |
2.280 | 1620366 | 78 | 637 | 715/5=143 |
2.310 | 1555532 | 34 | 681 | 715/5=143 |
蓝色攻速的这些都是新做的,2.2X那组是前面已经贴过的,放一起,方便看看数值。如果想验证准确性点攻速可以下载测试视频。为了降低一些测试量(5分钟的话从录,到截,到数,一条数据需要大概20分钟时间,太久了),每条数据我都只测了1分钟。 测试方法还是一样的,按住鼠标猛击打罪恶之心。每个视频的开头我会开一下面板,可以看到我的攻速和爆伤,暴击的数值会在屏幕上直接显示,非暴击的数值可以根据爆伤算出来,然后根据结束时目标的血量和数出来的暴击次数,算出非暴击次数,相加得到总次数。 误差前面说过,最多不会超过1次。
每3条数据为一组,每一组里,我穿的装备,除了左戒,其他都一样,通过替换左戒,来得到3个临近的攻速,左戒就是前面贴过的3个,攻速分别为5 7 9,他们附带的最小值都一样,都不带力量和爆伤,所以在同一组测试里,换左戒不会影响打出来的数字大小。
通过这些测试的结果,主要看到两个现象:
1)这些实测出来的攻击次数,在我前面推导出来的帧数-攻速-攻击次数表里都有出现,至少是近似值,105 109(108可能是误差) 124 128 179,137 143 都有近似值。186差的比较多,这个后面再说。这些攻速是我随便取的,穿一件暮光,得到一组,再穿一个巫异,得到一组,主手匕首1.5换成1.8的,再得到一组,这样得到的,不是根据表刻意凑的。所以得到的这些实测值与推测值很近似,这应该不是个巧合。
2)每组3条数据,都是差2%攻速,每多2%攻速,可能会改变攻击次数,也可能完全没变化。
这两个现象说明,我的假设基本可以认为是成立的:Frame这个机制在D3中确实存在,不光是作用在冲刺尾气上,对猛击这样的普通攻击技能也有效。攻速的提升需要达到一定量变,才会引发单次动作帧数的改变,从而引发单位时间攻击次数的改变,这一条通过这些数据应该可以得到确认了。
七 对表进一步修正
前面我们推出了帧数-攻速-攻击次数表,并收集了一些数据,但仔细将这些数据与表对照,是有问题的,主要是2个:
1)比如2.01攻速应该是30F,1分钟120下,实测是124下,也就是实测打击数多余预测。
2)比如1.98和2.01攻速没有发生变化都是124,变化发生在2.01个和2.04之间,变成了128,但根据这个表,断点应该是2.00整,变化应该发生在1.98和2.01之间才对。前面在做小旋风测试的时候,断点也确实是发生在2.00,他就没这问题。
发现了这两个问题后,我又做了一个更直观的测试。1.00攻速,打5分钟,结果:
攻速 | 总伤害 | 暴击次数 | 非暴击次数 | 5分总次数 | 每分次数 |
1.000 | 215380 | 22 | 288 | 310 | 62 |
1.0攻速5分钟打出了310次,每分钟62次,这很奇怪,用传统的想法,攻速1.0么一分钟应该60次,解释不了;用我的理论,1.0攻速正好是 60F的断点,达到1.0就应该意味着每次猛击的时间是60F,一分钟3600F,应该也是正好60次才对,即使1.0是算作59F,那根据表也应该是 61次/分,还是解释不了。
其实这个现象我已经不止一次的看到有人提出过了,因为这很容易观察到,打2分钟,发现打出来的次数比120多,或者打120下,发现用时不到120秒,即使用更粗糙目测+秒表,这个现象也很明显。接下来我试图对这个现象进行解释。
前面写的东西,都是客观的,但从这里开始,已经既没有官方的结论,也没有D2的经验可供参考,完全是我的主观推测,伴随着各种假设,以及去分析假设靠不靠谱,所以不要认为我接下去说的都一定是对的,很可能完全不是这么回事儿。如果你对这些不是很确定的东西不感兴趣,那么读到这里就可以结束了,截止第六段已经可以说明一些问题。 愿意读下去的人,可以帮我一起把遗留的问题解决。
为了解释1.0攻速1分钟打出62次这个现象,我做了两种假设:
1)1秒不是由精确的60F构成的,可能是62,或者说1F的时间不是精确的1/60秒,可能是1/62秒。一秒62F,1分钟3720F,一次攻击60F,那就会有62次。
2)依然是1秒钟精确的60F,这不变,但由于某种原因,在攻击过程中,一个完整的攻击动作中的某几个F被吃掉了,一个本需要60F时间完成的猛击动作,只用了58F的时间就打完了,一分钟还是3600F,每击只花了58F,就有62次。
以上两种假设都是有可能的,我个人比较偏向于第二种
假设一:我觉得这种假设可能性不大的原因有两个,一是因为现在的技术要做到准确的一秒60F并不难,二是经过一些研究,我觉得1F确实是1/60秒,回到前面尾气测试时贴的2.01 2.04这两个攻速的视频,我用他们来找1F的时间长。
在尾气测试中,我们知道尾气无论是断点的位置,还是在某个F值时的跳数,都是与理论计算出的表格完全符合的,他并没有猛击这样断点位置和攻击次数发生偏离的问题。他没有发生问题,我的猜测是因为连续猛击是由若干个独立的动作拼接而成的,在拼接的过程中可能会出问题,而一次小旋风的若干跳,他们是一个不可分割的整体,是一次成型的,所以我觉得去观察小旋风是靠谱的。
在2.01 2.04尾气这两个视频中,我保留了白字没有关闭,用来观察F的长度。视频的采样率是60,也就是视频里的一秒是由60张画面组成的,每张画面长1/60 秒,如果游戏中的1F确实是1/60秒的话,视频里每一副画面的时间长短就应该与1F相等,虽然他的生成节奏可能和F不同步,但时长是一致的。两个视频我都采用逐画格播放,按一下键盘,放一格,来观察到底用了多少格画面,即多少个1/60秒来完成这些跳。
在这两个攻速时,小旋风每跳都是9F,总共都应该是20跳。攻击动作都会有前摇,判定,后摆的过程,由于小旋风一直是那个样子,我看不清的前摇从哪里开始后摆到哪里结束,就只能从判定点来看,于是从第一次产生伤害,到最后一次产生伤害,这样去掉了第一跳的前摇,和最后一跳的后摆,总共就是19跳的时间,应该是9*19=171F。如果1F的长度确实等于1/60秒,那么这断时间也应该有171个画格,至少比较接近。观察下来的结果是:
2.01的视频中,第一跳从6分第8格开始,9分01格结束,一共173格
2.04的视频中,第一跳从5分第11格开始,8分01格结束,一共170格。
如果像假设一中说的,一秒有62F,每跳应该是9/62秒,19跳应该是19*9/62秒=19*9*60/62格=165格。
显然170和173还是更接近于171而不是165. 所以通过这个研究我觉得1F的时间应该就是1/60秒整,他不会被挤压。
假设二:既然研究表明1F应该就是1/60秒没问题,那么可能性就更倾向于假设二了,一个攻击动作的某几个F被吃掉了。为甚么会这样,前面已经有提到,因为我们在按住鼠标连续攻击时,这些攻击是有若干个动作连接形成的动作序列,你单独打一下猛击就停,根据攻速,他应该耗时比如20F,这没问题,但当按住鼠标连续打很多个猛击的时候,比如按住鼠标让他打10下,就不是200个F,某些F被吃掉了或者说丢失了,变成了可能190F,于是只需要比原来更短的时间就能打完。为甚么会这样,我说不出绝对正确的理由,只能继续假设。好吧,在假设里还要做假设。。。
接下来假设为甚么某些F会丢失,是怎么丢失的。
假设三:当你按住鼠标,等于不停的在向游戏发出攻击的指令,也就是你发送的比他执行的快,游戏受到这些来不及执行的指令时,生成一个指令序列,动作 1连着动作2连着动作3这样,在链接的过程中,发生了损耗,就好比你要把一些断掉的细纸条链接起来,你需要在每一条的末尾涂一些胶水,把后一条粘上来,这样就使断裂的纸条产生了连贯性,当然问题就是每一个纸条比原来短了一点,因为涂胶水的部分被后一条覆盖了。 既要把纸条连接起来,又不能损失一丝长度,现实中是做不到的。所以我猜测在游戏中,为了保证动作的连续性,也可能损失一点长度。
为甚么尾气没有问题,因为他是作用在怪身上的,你仍出去一个尾气,接下来他就是自己运作,与你本身不构成动作序列的关系,于是就不需要拼接,就没问题。
如果确实是这样的话,那本来一个10F的猛击,会变成9F,或者8F,一个60F的猛击会变成59F或者58F。等于每个攻速对应的F值会比表中低 1-2,这个看起来还算有点味道,比如测试中的1.74攻速 109跳,本来1.74攻速应该对应1.71的35F,给他减2F变成33F后,正好对应109次。
但这个假设还是有问题,你会发现,测试数据中,某些攻速需要-1F来看表,而有些又是需要-2F,这个无法解释。还有,降1-2个F看表不会改变表上的那些数字,这样依然无法解释为甚么会出现186次,这个数值。
总之这个假设感觉还是不太对,我觉得是因为我把F丢失的方式想的太简单了,确实,一款2012年的游戏,动作序列的连接,做的像连纸条这么简单,也是稍微扯淡了点。。。有必要把他想的再复杂一些。
假设四:我尝试来设计一套更复杂连接方式。
根据平时的游戏经验,我想到一个东西,半秒,有些东西以半秒为单位来显示,比如回血绿字,半秒一跳,他就像是一个结算周期,是一个比F更大的时间单位,之后我称一个半秒为1U。现实中,我们用毫秒,秒,分等单位来衡量时间,而游戏系统内,是以F和U为单位来计算时间,拍一巴掌需要几F,拍死一只怪需要几U,应该这样来说。
按理说1秒=60F,半秒应该是30F,但我要假设的是1U=31F,也就是1U实际比半秒长一点点=31/60秒,1F还是稳定的1/60秒。
为甚么我假设1U=31F,31这个数字,对编程来说也是有一定特殊性的。编程时经常会去用一些2的整数次方的数字,比如2^5=32。所以我会准备一个32个格子的容器U去存放F,并且编程中我们知道,各种容器,数组啊,集合啊,等等,格子的编号都是从0开始的,第一格编号是U[0],第二格是 U[1],依次。为了方便,很可能第一格留空,如果从第一格开始放,会变成U[N]里放的是第N+1个单位,后续调用很麻烦,从第二格开始放,这样格子的编号与单位的编号就一致了,比如编号是U[N]的格子放第N个单位,会比较比方便。这样一共32个格子,第一格空掉,使用的就是从U[1]到U[31]这 31个格子,U[0]空着不用。
说这些东西只是我想说明以1U=31F来作为一个游戏内时间计量单位,以一个32格的容器来制作U,这些在编程时的可能性是有的。
回到动作序列的连接,在假设三中我提出直接把各个动作连起来,这种方式不光是过于简单,而且实现上会受更多其他因素的干扰,因为每个动作的时间太短了只有几F,也许会受网络等因素干扰。相比之下,1U是一个比较长的时间单位,受影响的机会要小的多,所以更好的方式是,先把将要执行的每个动作放进一个更大的大容器U里,然后再去连接这些U。就像先把东西装进车厢,然后连接车厢变成火车。如果一3个动作是10F 10F 11F,正好放进一个U里,如果一个动作比较长,比如有40F,那么前31F放在第一个U1里,后9F放在U2里,这样。
当我们给游戏发送连续的游戏指令时,比如按住鼠标说攻击攻击攻击,就生成了动作序列,序列生成的方式就是一个U接一个U这样拼上去。拼U的人并不关心U里装的是甚么,他只管把1个个U拼起来并且保证一秒正好由2个U组成,由于每个U的长度是32格(第一格空着,二到最后一格存放这动作内容),直接拼时间会凑不拢,于是,这个拼接工把每个U去头去尾,变成30格即30F的长度,组装,就正好是整数秒了。去头没关系,头本来就是空的,去尾就有问题了,这里是存着东西的,但没办法,这一格里的F就被吃掉了,丢失了。
每秒由2U拼接成,每U丢失了1F,这样,等于每秒会丢失2F。这2个U里原本装着62个F,其中第31F和第62F在拼接时被吃掉了。
这样的话,游戏用1秒60F的时间,就能完成了62个F的动作,因为其中2F被吃掉了,不用表现了,这便是假设4得出的结论。看上去和假设一有点像,都提到了62F,但是不一样的。假设一里的一秒62F,是在1秒里确实装了62个F,每个F的时间被挤压了,假设四里的1秒62F,每个F的时间还是 1/60秒,没被挤压,只是有2个F丢失了,1秒里装的还是60个F。
造成这个问题的原因,我觉得是程序制作时的一个失误,设计者肯定是希望1.0攻速打一分钟出现60次攻击的,现在出现62次肯定不是他故意为之。在 1个U里,如果只储存30个F,头尾都空掉,就没问题了,拼接的时候去头去尾正好去掉两个空格,设计初衷应该是这样,但可能在实现时的忽略,把最后一格也存了一F,问题就发生了。其实平时编程时,诸如搞错数组序号这种事是很常见的错误,也没甚么稀奇。
根据假设四,1分钟60秒,能够用来完成60*62=3720F的动作,当然实际的时长还是3600F,能在3600F完成3720F的动作,因为 120个F在拼接时丢失了。也就是说,如果一个动作需要20F的时间,在假设四这样的机制下,1分钟能完成3720/20=186次。Oyeah,我很欣喜的发现我得到了186这个之间无法解释的数字。 同理,用3720/不同的帧数,就能得到在这个帧数下1分钟的攻击次数,于是我们得到一张修正表。
帧数 | 攻速 | 理论每分次数 | 修正次数 | 帧数 | 攻速 | 理论每分次数 | 修正次数 |
60 | 1.000 | 60.00 | 62.00 | 30 | 2.000 | 120.00 | 124.00 |
59 | 1.017 | 61.02 | 63.05 | 29 | 2.069 | 124.14 | 128.28 |
58 | 1.034 | 62.07 | 64.14 | 28 | 2.143 | 128.57 | 132.86 |
57 | 1.053 | 63.16 | 65.26 | 27 | 2.222 | 133.33 | 137.78 |
56 | 1.071 | 64.29 | 66.43 | 26 | 2.308 | 138.46 | 143.08 |
55 | 1.091 | 65.45 | 67.64 | 25 | 2.400 | 144.00 | 148.80 |
54 | 1.111 | 66.67 | 68.89 | 24 | 2.500 | 150.00 | 155.00 |
53 | 1.132 | 67.92 | 70.19 | 23 | 2.609 | 156.52 | 161.74 |
52 | 1.154 | 69.23 | 71.54 | 22 | 2.727 | 163.64 | 169.09 |
51 | 1.176 | 70.59 | 72.94 | 21 | 2.857 | 171.43 | 177.14 |
50 | 1.200 | 72.00 | 74.40 | 20 | 3.000 | 180.00 | 186.00 |
49 | 1.224 | 73.47 | 75.92 | 19 | 3.158 | 189.47 | 195.79 |
48 | 1.250 | 75.00 | 77.50 | 18 | 3.333 | 200.00 | 206.67 |
47 | 1.277 | 76.60 | 79.15 | 17 | 3.529 | 211.76 | 218.82 |
46 | 1.304 | 78.26 | 80.87 | 16 | 3.750 | 225.00 | 232.50 |
45 | 1.333 | 80.00 | 82.67 | 15 | 4.000 | 240.00 | 248.00 |
44 | 1.364 | 81.82 | 84.55 | 14 | 4.286 | 257.14 | 265.71 |
43 | 1.395 | 83.72 | 86.51 | 13 | 4.615 | 276.92 | 286.15 |
42 | 1.429 | 85.71 | 88.57 | 12 | 5.000 | 300.00 | 310.00 |
41 | 1.463 | 87.80 | 90.73 | 11 | 5.455 | 327.27 | 338.18 |
40 | 1.500 | 90.00 | 93.00 | 10 | 6.000 | 360.00 | 372.00 |
39 | 1.538 | 92.31 | 95.38 | 9 | 6.667 | 400.00 | 413.33 |
38 | 1.579 | 94.74 | 97.89 | 8 | 7.500 | 450.00 | 465.00 |
37 | 1.622 | 97.30 | 100.54 | 7 | 8.571 | 514.29 | 531.43 |
36 | 1.667 | 100.00 | 103.33 | 6 | 10.000 | 600.00 | 620.00 |
35 | 1.714 | 102.86 | 106.29 | 5 | 12.000 | 720.00 | 744.00 |
34 | 1.765 | 105.88 | 109.41 | 4 | 15.000 | 900.00 | 930.00 |
33 | 1.818 | 109.09 | 112.73 | 3 | 20.000 | 1200.00 | 1240.00 |
32 | 1.875 | 112.50 | 116.25 | 2 | 30.000 | 1800.00 | 1860.00 |
31 | 1.935 | 116.13 | 120.00 | 1 | 60.000 | 3600.00 | 3720.00 |
这张表看起来就比较靠谱了。与前面的一些测试结果差异也很小(我是指跳数上的差异比较小,断点位置的差异还是有的,这个下一步再解决)
再做一个测试来说明假设四比假设三更靠谱,通过表的走势可以看到,随着攻速的提升,攻击次数的变化也就跨度就越大,要验证哪一种假设更靠谱,比较好的办法是制造一个高攻速,看看他的攻击次数更接近哪种假设。
我做了3.816攻速,双持2把1.8速度的匕首,穿除了旧祖鞋外所有的满值攻速装,加变身。结果:
攻速 | 总伤害 | 暴击次数 | 非暴击次数 | 总次数 |
3.816 | 807047 | 31 | 202 | 233 |
(两把匕首的最小值是一样的,所以在饰品的最小值属性加成后,主副手的DPH一样,打出的数字一样,还是可以用同样的办法来统计攻击次数)
1分钟233次,这个数字在修正后的每分次数中可以找到,对应16F 3.750攻速的232.5次。而在原来的理论次数中,没有与之对应的数值225 240都差的很远,按照假设三的少看1-2个F去找,找不到,说明假设三不靠谱。
最后的这个高攻速测试应该可以表明,我的假设四还是有点谱的,毕竟在高攻速下,攻击次数的跳跃幅度是很大的,根据假设的修正能与实测很接近,应该不是巧合了。
八 遗留的问题和结论
最后通过假设四我依然没有解决的问题是,为甚么断点不是出现在60/N这些位置。这个很遗憾,这也是我长篇大论的主要原因,我想让看的人了解我的想法,帮我想想为甚么断点会偏移,偏移到哪去了。我不想用大量的实测去逐个逼出断点的位置,这样还是搞不清为甚么,肯定是有某个原因在里面的,还是先想出原因,算出理论值,再用实测去验证比较好。
更新,我暂时找清出断点位置,可以作为一个初步结论,还是比较准确的,可以作为参考,这张表适用于猛击,先祖:
帧数 | 每分钟攻击次数 | 攻速 | 帧数 | 每分钟攻击次数 | 攻速 |
60 | 62.00 | 0.983 | 30 | 124.00 | 1.967 |
59 | 63.05 | 1.000 | 29 | 128.28 | 2.034 |
58 | 64.14 | 1.017 | 28 | 132.86 | 2.107 |
57 | 65.26 | 1.035 | 27 | 137.78 | 2.185 |
56 | 66.43 | 1.054 | 26 | 143.08 | 2.269 |
55 | 67.64 | 1.073 | 25 | 148.80 | 2.360 |
54 | 68.89 | 1.093 | 24 | 155.00 | 2.458 |
53 | 70.19 | 1.113 | 23 | 161.74 | 2.565 |
52 | 71.54 | 1.135 | 22 | 169.09 | 2.682 |
51 | 72.94 | 1.157 | 21 | 177.14 | 2.810 |
50 | 74.40 | 1.180 | 20 | 186.00 | 2.950 |
49 | 75.92 | 1.204 | 19 | 195.79 | 3.105 |
48 | 77.50 | 1.229 | 18 | 206.67 | 3.278 |
47 | 79.15 | 1.255 | 17 | 218.82 | 3.471 |
46 | 80.87 | 1.283 | 16 | 232.50 | 3.688 |
45 | 82.67 | 1.311 | 15 | 248.00 | 3.933 |
44 | 84.55 | 1.341 | 14 | 265.71 | 4.214 |
43 | 86.51 | 1.372 | 13 | 286.15 | 4.538 |
42 | 88.57 | 1.405 | 12 | 310.00 | 4.917 |
41 | 90.73 | 1.439 | 11 | 338.18 | 5.364 |
40 | 93.00 | 1.475 | 10 | 372.00 | 5.900 |
39 | 95.38 | 1.513 | 9 | 413.33 | 6.556 |
38 | 97.89 | 1.553 | 8 | 465.00 | 7.375 |
37 | 100.54 | 1.595 | 7 | 531.43 | 8.429 |
36 | 103.33 | 1.639 | 6 | 620.00 | 9.833 |
35 | 106.29 | 1.686 | 5 | 744.00 | 11.800 |
34 | 109.41 | 1.735 | 4 | 930.00 | 14.750 |
33 | 112.73 | 1.788 | 3 | 1240.00 | 19.667 |
32 | 116.25 | 1.844 | 2 | 1860.00 | 29.500 |
31 | 120.00 | 1.903 | 1 | 3720.00 | 59.000 |
如果你的攻速达不到下一档,那就只有上一档的攻击次数,比如攻速是1.98,没有达到会突变的2.034,那实际就只有1.967的攻速,1分钟只能打出124下。
九 现实意义
最现实的就是前言里提到的,有没有去多追求一点攻速的必要。因为现在这个阶段,很多人身上的属性已经比较饱和了,白多一个词缀的空间几乎不存在了,剩下的就是去把一些数值做饱满。 攻速必须达到一定量变,才会引起攻击次数增加或者战斗时间缩短的质变。在追求装备上攻速属性饱满的时候要付出高昂的物质代价,那么就很有必要认真考虑下有没有回报。
从实测数据可以看出,当攻速比较高时,让每次攻击减少1F需要提升的攻速相当多,从2.8X和3.0X那两组数据都是换了两次戒指提升了4%的攻速,都没产生差别,4%不是一个小数目,全身殷娜,巫异,暮光,拉库尼都买8速和都买9速价钱差的可不少。
从表的走势也可以看出,当攻速在2.5往上时(这个数值对变身后的双持蛮子不难达到),每降1F,需要的攻速提升已经超过了0.1,我们武器的基础速度一般也就是1.X,比如BUG锤双持,主手也是锤的话,基础速度只有1.45,1%攻速的提升只能提高0.0145的攻速,要累积超过0.1越过下一个短点,需要7%-8%的攻速,这就不是暮光头选8速还是9速的问题了,这得多穿一件攻速装才有用, 这就得完全改变配装计划。
由于高攻速时,每降1F需要的攻速非常多,多1%-2%攻速完全无变化的可能性其实蛮大的。
如果你现在正在追求自己整体配装的平衡,不妨考虑一下这个问题,如果你的攻速差很少就能达到下一个断点,非常有必要去把这些攻速做出来,如果再多个3%-5%攻速也还不会越过断点,那还是先转去把别的属性属性。
由于后续发现不同的技能,断点位置不一样,所以在确定自己需要多少攻速的时候,最好根据自己的build所用的技能,找出一个合适的点。
蛮子常用攻击技能很少,先祖占了绝大部分吧。基本把先祖表和尾气表结合起来看下就行了。
其实如果你有能力都用满速的,其实根本不用纠结这些东西,毕竟是大于等于的关系,多了最多是不生效,反正也没负作用。我研究这些,主要是给暂时无法把攻速做满的人一些参考。
比如我的项链:
项链
因为我自己是不朽套的,能做攻速的位置很少,于是我一直很在意有限那几个部位上的攻速,别的属性我可以其他地方找,攻速找不出来。这个项链我一直不太满意,主要是攻速只有7,我已经做了很多很多了,攻速不是9就无视。
现在基于这个理论,我可以重新审视下有没有必要再继续去试图挖掘那2%攻速了,然后发现,确实没必要了,我现在主副手攻速是1.98 2.14,正好刚跨过1.967 和2.107这两个断点,如果多2%攻速,会变成2.0和2.17还是没跨过一下个断点2.034和2.185。 所以,我可以不用再折腾这玩意儿了。
十 理论意义
通过这次研究,不管你用什么技能,不管什么攻速,不管我说的对不对,反正有一点很清楚:实际单位时间打出来的次数都会比(攻速*时间)的这个预期值多。而以往我们的各种理论,比如维持变身啊甚么,都是基于攻速*时间在考虑的,这也许就会有点问题,不过以后慢慢再说吧。
后续我又采集了一些猛击的数据,基本已经确定了断点位置,表格在第八部分已经作为结论更新,并且做了先祖的测试,先祖和猛击是一样的。
本来从一开始我就是想用先祖做测试的,毕竟这才是常用技能,但我怕做不到绝对的无限先祖引起误差所以改用了猛击。而且之前一直局限在暴击回怒的圈子里,我觉得即使无限了,会有很多很多暴击,我会数不清楚。经bigrock一句话提醒,我想到了,实验制造无限先祖不一定要用暴击回怒,可以靠减怒气消耗来实现。我没有那么多减先祖装备,但我想到了“奋战不懈”这个被动,生命低于20%,怒气消耗降低75%,然后我随便找个怪把我打红,带一件-5的装备,就绝对无限了。于是可以用先祖继续测试。
下面是猛击和先祖最后测试数据,因为是一样的,就放在一起了:
攻速 | 1分次数 | 攻速 | 1分次数 |
1.710 | 105 | 2.34 | 143 |
1.740 | 109 | 2.3712 | 149 |
1.770 | 108 | 2.4024 | 149 |
1.845 | 115 | 2.376 | 148 |
1.875 | 115 | 2.412 | 148 |
1.905 | 119 | 2.448 | 148 |
1.980 | 124 | 2.862 | 179 |
2.010 | 124 | 2.898 | 179 |
2.040 | 128 | 2.934 | 179 |
2.1996 | 137 | 3.024 | 186 |
2.2308 | 137 | 3.06 | 186 |
2.262 | 136 | 3.096 | 186 |
2.250 | 688 | ||
2.280 | 715 | ||
2.310 | 715 |
把这些测试结果与最后修正后得出的表比较,还是比较吻合的。篮色高亮的都是在断点边缘的攻速,确实也都符合了规律,所以应该还是比较可靠的。
断点的偏移问题,在我用其他技能测试后,受到一些启发,我发现,不同的技能在相同的攻速下,单位时间打出的次数不一样,比如1.0攻速,猛击能打出 62下,飞斧能打出73下,这说明,不同的技能,达到某一个F,需要的攻速不同。要实现这样的效果可能有很多种方式,最简单的一种就是直接在基础标准断点攻速的基础上乘一个系数,相当于给了他一个折扣,使他更容易达到低F值,不同的技能可能会有不同的系数,制作游戏时可以通过修改系数很容易的控制不同技能的快慢。
标准断点位置是60/60,60/59,60/58.....依次到60/1,我在这些攻速点上都乘以一个59/60的系数,就得到了现在猛击,先祖修正表的断点位置。当然后续还要再推敲推敲,不过实际数据确实蛮吻合的。
如果是飞斧,这个系数大概是51/60.得到的飞斧表是
帧数 | 每分次数 | 攻速 | 帧数 | 每分次数 | 攻速 |
60 | 62.00 | 0.850 | 30 | 124.00 | 1.700 |
59 | 63.05 | 0.864 | 29 | 128.28 | 1.759 |
58 | 64.14 | 0.879 | 28 | 132.86 | 1.821 |
57 | 65.26 | 0.895 | 27 | 137.78 | 1.889 |
56 | 66.43 | 0.911 | 26 | 143.08 | 1.962 |
55 | 67.64 | 0.927 | 25 | 148.80 | 2.040 |
54 | 68.89 | 0.944 | 24 | 155.00 | 2.125 |
53 | 70.19 | 0.962 | 23 | 161.74 | 2.217 |
52 | 71.54 | 0.981 | 22 | 169.09 | 2.318 |
51 | 72.94 | 1.000 | 21 | 177.14 | 2.429 |
50 | 74.40 | 1.020 | 20 | 186.00 | 2.550 |
49 | 75.92 | 1.041 | 19 | 195.79 | 2.684 |
48 | 77.50 | 1.063 | 18 | 206.67 | 2.833 |
47 | 79.15 | 1.085 | 17 | 218.82 | 3.000 |
46 | 80.87 | 1.109 | 16 | 232.50 | 3.188 |
45 | 82.67 | 1.133 | 15 | 248.00 | 3.400 |
44 | 84.55 | 1.159 | 14 | 265.71 | 3.643 |
43 | 86.51 | 1.186 | 13 | 286.15 | 3.923 |
42 | 88.57 | 1.214 | 12 | 310.00 | 4.250 |
41 | 90.73 | 1.244 | 11 | 338.18 | 4.636 |
40 | 93.00 | 1.275 | 10 | 372.00 | 5.100 |
39 | 95.38 | 1.308 | 9 | 413.33 | 5.667 |
38 | 97.89 | 1.342 | 8 | 465.00 | 6.375 |
37 | 100.54 | 1.378 | 7 | 531.43 | 7.286 |
36 | 103.33 | 1.417 | 6 | 620.00 | 8.500 |
35 | 106.29 | 1.457 | 5 | 744.00 | 10.200 |
34 | 109.41 | 1.500 | 4 | 930.00 | 12.750 |
33 | 112.73 | 1.545 | 3 | 1240.00 | 17.000 |
32 | 116.25 | 1.594 | 2 | 1860.00 | 25.500 |
31 | 120.00 | 1.645 | 1 | 3720.00 | 51.000 |
粗略测了几组,基本符合,可以看到,同样的攻速,扔飞斧实际的攻击次数要比打猛击多很多。也就是说飞斧这个技能的输出比字面上看上去的高不少
最后
我所说的很多东西,都是基于假设,测试结果接近也不能说明他就一定是对的,未必可靠,只有官方说的才可靠。
所以,要不要信,信多少,各位还是自己把握。
相关阅读:暗黑3
- (2024-11-29) 暗黑3 巫医圣教军高层秘境打法教学分享
- (2024-11-28) 暗黑3 野蛮人毕业装备及装备属性选择
- (2024-11-27) 暗黑3 野蛮人物理嘲讽流大秘境装备技能搭配
- (2024-11-26) 暗黑3 圣教军格挡值收益分析 格挡几率多少合适
- (2024-11-25) 暗黑3 古董之家位置 古董之家在哪刷