//没登陆

欢迎您来到凯恩之角,奈非天!

帖子:1565

符文:19

31#
disunlimited 发表于 2013-6-7 00:17
这个可以,我亚服有垃圾的陨石装。

在多说一句,在那个帖子里面,对于DOT的用法严格来说有点不对。DOT ...

其实陨石留下的熔火也不该算入DOT 那是范围AOE...
只是这个机制真是搞不懂...
算是福利吧...


发表于 2013-6-7 00:26:45 |只看该作者 来自:福建

AFK 1/1 GCUP的节操 1/1 刀妹的诅咒1/1

帖子:7365

符文:521

32#
disunlimited 发表于 2013-6-7 00:17
这个可以,我亚服有垃圾的陨石装。

在多说一句,在那个帖子里面,对于DOT的用法严格来说有点不对。DOT ...

哈,关于这个,可能要去他那回贴才成,要回复@GabrielRum  大大才成。



发表于 2013-6-7 00:28:11 |只看该作者 来自:广东
渺万里层云,千山暮雪

帖子:1058

符文:127

33#
人間丶失格 发表于 2013-6-7 00:26
其实陨石留下的熔火也不该算入DOT 那是范围AOE...
只是这个机制真是搞不懂...
算是福利吧...

aoe和dot并不矛盾。aoe是关于攻击机制的,dot是关于伤害机制的。

点评

人間丶失格  就是搞不懂陨石熔火用这个伤害机制的用意何在 天知道BLZ是怎么考虑的...  发表于 2013-6-7 02:21
发表于 2013-6-7 01:44:23 |只看该作者 来自:广东
[armory]http://tw.battle.net/d3/zh/profile/disunlimited-1156/hero/41865165[/armory]

帖子:364

符文:16

34#
本帖最后由 GabrielRum 于 2013-6-7 18:10 编辑
disunlimited 发表于 2013-6-7 00:17
这个可以,我亚服有垃圾的陨石装。

在多说一句,在那个帖子里面,对于DOT的用法严格来说有点不对。DOT ...


了解了,我玩的游戏有点少,所以不太懂这个词的意思,我原以为是damage of time的意思。。。。。

有空我注明一下吧,不过现在不怎么上论坛了,上来就是处理一下交易区的事,所以反应会比较慢。。。。。


ps:D大在此,不敢当不敢当

点评

disunlimited  欢迎大驾  发表于 2013-6-7 15:36
发表于 2013-6-7 14:12:02 |只看该作者 来自:江苏
交易区发帖请先阅读版规

帖子:1364

符文:56

35#
disunlimited 发表于 2013-6-7 00:17
这个可以,我亚服有垃圾的陨石装。

在多说一句,在那个帖子里面,对于DOT的用法严格来说有点不对。DOT ...

dot技能实际也是通过多次造成伤害实现持续伤害的,只不过造成伤害的间隔很短。
我记得在d2里,每秒25帧进行计算,d3的dot会不会也是如此呢?
发表于 2013-6-7 15:00:05 |只看该作者 来自:广东
joking#31630

帖子:1058

符文:127

36#
本帖最后由 disunlimited 于 2013-6-7 21:11 编辑
zjy4320 发表于 2013-6-7 15:00
dot技能实际也是通过多次造成伤害实现持续伤害的,只不过造成伤害的间隔很短。
我记得在d2里,每秒25帧进 ...

哈,老玩家……

DOT属于伤害机制。大部分ARPG都是将打击(hit)机制和伤害(damage)机制划分得很明确的,先判定是否hit,再计算伤害多少,然后是伤害释放。这个属于最基本的逻辑,因为计算机进行判断总是一步一步来的。dot,只是伤害释放的一种形式,就是伤害不是在某个时间点上一下子释放完毕,而是在某一时间段内逐渐释放完毕。

你谈到帧(frame),这个确实可能是理解许多问题的其中一个关键。帧实际上是指屏幕的刷新率,比如D2是25帧,就是每秒刷新我们的屏幕25次。D3不知道是多少帧,前面少飞引入另外一个帖子,谈到1/60秒的概念,我觉得实际上在研究的就是D3的帧设定的问题。

任何游戏都要考虑帧的问题,因为在最终显示图像时,必须是以帧的方式来呈现的,任何打击动作(不论是人物的还是技能自身的,比如能量旋风)的消耗时间,都需要以帧为单位来进行结算,一个帧内人物只能干一件事情。一旦涉及到帧,就必然涉及到取整计算。比如一个人物做出一个打击动作,考虑到攻速,计算出来的动作时间可能是花费了0.123456789秒,这时候就必须考虑取整的方案,最终让这个动作在整数倍帧内结算完毕,这个取整后的结果,才是真实的动作时间。正因为存在取整,在单发某个技能的时候,就有可能存在攻速的“浪费”问题,比如2攻速和2.01攻速,最终取整的结果可能是一样的,比如两者实际上的动作时间都是30帧,虽然理论上后者只需要29.9帧就可以做完这个动作,但剩下的0.1帧他是什么都干不了的——这是D2的逻辑,选择对动作时间使用某种取整规则,导致了攻速档位的存在,包括FCR、FHR等也是类似。

那么D3呢?D3并不是“粗暴”地对动作时间进行绝对地取整,将多出来的攻速完全无视——如果是这样的话,攻速细微上升带来的dps提升将是完全无效的,而且也会存在攻速档位的问题——显然D3在绝大部分技能上不存在这一问题。看了Lina_Inverse、GabrielRum、SORAL等人在几个黑人研究帖子中的数据后,我想D3采取的方案,仅仅是对特定时间点上(比如每次跳字时间)的伤害和动作时间结算进行取整,同时还会将余量进行保留。以下的表述,应该是SORAL在某个帖子中提出的公式的实质概念。

DPH*APS=DPS                                                                                               (APS是攻速)
1/APS=TimePerAttack                                                                                   (动作时间,以秒为单位,有小数)
TimePerAttack*60=FramePerAttack1                                                           (实际动作帧数,以帧为单位,有小数)
[TimePerAttack*60]=FramePerAttack2                                                         (计算动作帧数,以帧为单位,向下取整)
FramePerAttack1-FramePerAttack2=FrameRemainder                               (未在本次打击动作内成功利用的余量帧,其实准确来说应该是余量时间,这里只是方便表达,否则公式还得绕一个弯,不足一帧的帧是一个不存在的东西,就跟没有半个山洞一样)
DPH/FramePerAttack1*FramePerAttack2=DamagePerAttack                    (本次打击实际造成的伤害,小于等于DPH)
DPH/FramePerAttack1*[ ∑(FrameRemainder)]=RemainedDamage       (可供附加释放的余量伤害)


于是,在某次打击动作后,由于取整的原因,可能存在余量帧。
这些余量帧会保存下来,如果人物持续施展打击的话(即站桩不断释放技能),则这些余量帧会不断递增,直至>1的时候,则进行释放。于是,就会发现在伤害显示上,出现振荡的规律。
但是,如果并非持续施展打击,而只是单次或有限打击次数的话,那么余量帧仍然会被浪费掉。从这个角度上说,如果只考察单次打击的话,攻速档位的概念依然是可用的。具体来说,计算FramePerAttack2时的取整幅度如果较小、或者恰好就是整数的话,那么单次打击对于DPH的利用率就会最高。
因此,能量旋风就存在攻速档位的概念,因为能量旋风也属于有限打击次数(6秒内)。如果能量旋风是一个如同黑人光波般的持续施放技能,则不会有攻速档位。

可以肯定的一点是,D2内部是整数运算的,大部分计算公式中,在计算结果有可能出现小数点时,都会立刻进行向上或向下取整。但某些DOT伤害,如毒伤害时(比如12秒内造成毒伤害451,12和451都是整数),如果我们要计算其每帧毒伤害的话,结果仍会是小数。那么在显示在屏幕上时,该如何交代每一帧所受到的伤害呢?这就需要有一个关于伤害显示的取整规则,但12秒最终造成的总伤害肯定是451。最终结果,伤害数字会呈现出振荡的规律,比如19、19、21、19、19、21之类。




附:

D2的帧计算方案是这样的(以下内容原作者为D2大神Louis-J,我只是伸手党)。现在D3的一些档位问题,比如能量旋风,原理应该类似,只是具体的计算方式不明。

==========================================================================

完成一个动作所需的帧数公式
Frames Per Attack={HitShift*(FramePerDirection) / [AnimationSpeed*(BaseRate+SpeedIncrease)/100]}-1

Fpa=Frames Per Attack 每次攻击帧数
HitShift=256
FramePerDirection 动作长度
AnimationSpeed 动作速度
BaseRate 基础效率
SI=SpeedIncrease
{ } 向上取整
[ ] 向下取整

其中HitShift固定为256。大部分的AnimationSpeed为256,大部分的BaseRate为100,SpeedIncrease就是通过装备、技能增加的攻速了。

具体的帧计算,核心的两个东西是AFrameCounter。counter负责基于增量的递增计数,直到计数值达到终止值后,就停止计算。此时计数结果落在某一个AFrame内,则代表完成这个工作需要多少帧。

AFrame:计数范围
Counter:计数值
AFrame表示一个计数范围, 如0 - 255表示AFrame为00,256-511表示AFrame为01……1024-1279表示AFrame为04……
如果一个计数值为4000,则/256后为15.625,向下取整,求得此时的AFrame为15。

--------------------------------------------------------------------------------------------------------------------------------------

现在假设某个动作的FramePerDirection是5,则HitShift*(FramePerDirection)=1280,这个1280称为终止值
假设AnimationSpeed是256、BaseRate是100、SpeedIncrease是0,则[AnimationSpeed*(BaseRate+SpeedIncrease)/100]是256(这里向下取整),这个256称为增量。则具体情况是:

从0开始计数,动作开始

Game tick 1
counter增加, counter=256(增量是256)
counter < 1280 动作继续
Aframe = 01

Game tick 2
counter增加, counter=512
counter < 1280
Aframe = 02

Game tick 3
counter增加, counter=768
counter < 1280
Aframe = 03

Game tick 4
counter增加, counter=1024
counter < 1280
Aframe = 04

Game tick 5
counter增加, counter=1280
counter>=1280
(达到终止值)
动作结束,寻找下一个动作,counter重新计数,下一个动作从这个tick开始。



由于1279时动作就结束(AFrame 04到1279),所以Game tick 5将作为下一个动作的Game tick 1(下一个动作从这个tick开始)。而不算在这个假设的动作中(这就是最上面公式中,先是向上取整,然后再减1的道理)。即从tick 1到tick 4共4ticks整个动作完成。就是说这个假设的动作速度增量SI为0时,可达到4Fpa(完成这个动作需4帧)。

上面是个很简单的例子,下面我们再考虑SI(SpeedIncreas)分别为-1、24、25这3种状态。其他参量都不变。
SI=-1,则 [256*(100-1) / 100]=[256*99/100] = 253
SI=24,则 [256*(100+24) / 100]=[256*124/100] = 317
SI=25,则 [256*(100+25) / 100]=[256*125/100] = 320

代码:
动作开始

Game tick 1
SI=-1,counter=253 Aframe=00
SI=24,counter=317 Aframe=01
SI=25,counter=320 Aframe=01

Game tick 2
SI=-1,counter=506 Aframe=01
SI=24,counter=634 Aframe=02
SI=25,counter=640 Aframe=02

Game tick 3
SI=-1,counter=751 Aframe=02
SI=24,counter=951 Aframe=03
SI=25,counter=960 Aframe=03

Game tick 4
SI=-1,counter=1012 Aframe=03
SI=24,counter=1268 Aframe=04
SI=25,counter=1280 动作结束

Game tick 5
SI=-1,counter=1265 Aframe=04
SI=24,counter=1585 动作结束

Game tick 6
SI=-1,counter=1518 动作结束


可见,SI=0时,动作在tick 4就完成;而SI=-1时,动作在tick 5完成。
SI=25时,动作在tick 3就完成;而SI=24时,动作在tick 4完成。
-1-,0,25就代表了这个动作Fpa发生变化所需SI的3个档次。

==========================================================================





点评

少飞  原来也是编程大师。。。。。嗯我为什么用了个也字,奇怪呀。  发表于 2013-6-7 20:55
发表于 2013-6-7 19:22:38 |只看该作者 来自:广东
[armory]http://tw.battle.net/d3/zh/profile/disunlimited-1156/hero/41865165[/armory]

帖子:836

符文:94

37#
看晕了,有点难消化啊,陨石装放仓库2周了,看来得搬出来再次研究下了
发表于 2013-6-7 20:03:55 |只看该作者 来自:北京

帖子:1364

符文:56

38#
disunlimited 发表于 2013-6-7 19:22
哈,老玩家……

DOT属于伤害机制。大部分ARPG都是将打击(hit)机制和伤害(damage)机制划分得很明确 ...

帧设定的问题很关键,这个弄清楚后,也许可以根据你所说的“呈现出震荡的规律”找出大概的取整方式甚至内部运作的一些公式。

ps:十分怀念露易丝姐姐
发表于 2013-6-8 14:49:24 |只看该作者 来自:广东
joking#31630
您需要登录后才可以回帖 登录 | 注册网易通行证