为什么我会走到你前面 小课题之移动错位

2020-12-02 11:08:13 神评论

17173 新闻导语

1、移动错位的形成机制 关于公主连结的站位机制,在@希儿_世界第一可爱的文章「永恒⚝薪火」[进阶硬核]公主连结游戏机制之站位机制中有着详细的介绍,这里就不赘述,本文是对其中理论的进一步运用。 但首先我们还是把最基础的几条公理给复制过来,更为详细的说明可以参照原文。 公理1:战斗开

1.png

1、移动错位的形成机制

关于公主连结的站位机制,在@希儿_世界第一可爱的文章「永恒⚝薪火」[进阶硬核]公主连结游戏机制之站位机制中有着详细的介绍,这里就不赘述,本文是对其中理论的进一步运用。

但首先我们还是把最基础的几条公理给复制过来,更为详细的说明可以参照原文。

公理1:战斗开始时,我方一号位坐标为-760,敌方一号位坐标为560,双方一号位相距1320,双方各个角色之间两两相距200。

公理2:除了羊驼以外的所有角色,入场时移速=12/帧,即最小步长=12。

公理3:角色开始入场后,移动直到攻击距离接触到敌方角色的受击宽度,该角色停止移动,这里受击宽度取100。

其实,移动错位的关键就在于这个公理2,它意味着公连的入场移动并不是连续的,而是离散的。

显然,如果公连的移动是连续的,那么角色停下时与攻击目标的距离那就是精准的攻击距离+受击宽度,在目标静止的情况下,己方角色两两之间的距离就是攻击距离之差,那错位就无从谈起。

但,如果移动是离散的,那幺蛾子可就多了,它允许某些情况下角色“多迈一步”,那么有些攻击距离相差小于12的角色之间,就有可能发生移动错位现象。

2、移动错位发生的条件

先上结论:

我们引入一组常数Cn(n=1,2,3,4,5),因为其与角色所在号位有关,姑且叫它号位常数其值如下

又设R1原本站位靠前的角色的攻击距离R2原本站位靠后的角色的攻击距离

n1为靠前角色所在号位n2为靠后角色所在号位。(就是1号位、2号位这种,在1号位则等于1)

d为二者攻击距离之差(的绝对值)

那这两个角色移动错位发生的条件为:

(%是取模运算符,也就是取余数)

这就是移动错位发生与否的判别公式

(需要确保在自己考虑的任意一个角色停下时,对方一号位已经停下,否则容易证明不可能发生移动错位)

不妨来举几个栗子,应用一下(折叠部分)

1、环奈、万圣忍、充电宝在单t情况下,环奈和万圣忍的站位是什么情况呢?

二者攻击距离之差d=440-433=7

原本环奈处于靠前的三号位,Cn1=C3=0,R1=433。

原本万圣忍处于靠后的四号位,Cn2=C4=8,R2=440。

则(Cn1-R1)%12=(0-433)%12=11,(Cn2-R2)%12=(8-440)%12=0,

11-0=11>d=7,故此时环奈和万圣忍会发生错位,万圣忍会跑到环奈前面,充电宝充万圣忍。

若是双t,则环奈原来处四号位,万圣忍处五号位,Cn1=C4=8,Cn2=C5=4.

(Cn1-R1)%12=(8-433)%12=7,(Cn2-R2)%12=(4-440)%12=8,

7-8=-1

2、布丁、空花,在对面带羊驼的情况下,站位又是什么情况呢?

这里需要注意,对面带有羊驼的情况下,由于羊驼后入场,我们处理时,需要把我方所有角色号位+1,比如一号位当作二号位,二号位当作三号位处理。

二者攻击距离之差d=130-125=5

原本布丁处于靠前的一号位,当作二号位处理,Cn1=C2=4,R1=125。

原本空花处于靠后的二号位,当作三号位处理,Cn2=C3=0,R2=130。

则则(Cn1-R1)%12=(4-125)%12=11,(Cn2-R2)%12=(0-130)%12=2,

11-2=9>d=5,故此时空花会跑到布丁前面挨打摩多摩多

3、移动错位发生条件的推导(硬核警告)

移动错位如果要发生,需要确保在自己考虑的任意一个角色停下时,对方一号位已经停下。故我们可以把对方的一号位当做一个桩子,自始至终都在同一个位置上,这样思考起来比较方便。

我们以环奈万圣忍为例,我们设开始入场时环奈到对方一号位的距离为a,万圣忍与环奈距离为b。(强调:此时我们已经把对方一号位当作站桩处理,不去考虑其入场过程)

我们设环奈攻击距离+敌方受击宽度(100)为r1,万圣忍攻击距离+敌方受击宽度为r2

根据公理3,我们可以推出万圣忍环奈移动步数,然后×12算出二者的前进距离

则可以得出万圣忍跑到环奈前面的条件:

(底角括号为意为向下取整

将不等式变换,得到

我们知道,把商向下取整,实际上就是进行整除:

整除之后又乘回来,相当于被除数减去余数:

那么我们可以把原不等式化简:

r2-r1等于二者攻击距离之差,我们设为d:

其实到这里,公式就出来了,不过如果仅仅是这样,我们计算时需要知道对方一号位的位置,而这是很麻烦的,我们需要对公式做进一步处理。

我们设R1为环奈攻击距离,则有:

根据取模的性质有:

我们可以设R2为万圣忍攻击距离,对其做类似处理。

式中,a是开始时环奈到对方一号位的距离。

如果设e为开始时双方一号位的距离,c为环奈到我方一号位的距离,那么 我们知道,游戏设定中双方一号位的初始距离为1320,可以被12整除,双方一号位的步长又为12,则e=1320-12k,k为自然数,显然e%12=0,我们有:

(c-100)%12是一个仅与环奈所在号位有关的数,我们可以全部列出(对万圣忍也是一样的):

一号位:8,二号位:4,三号位:0,四号位:8,五号位:4

我们引入之前所说的号位常数,则我们可以得到:

环奈和万圣忍发生移动错位的条件为:

n1、n2分别为环奈万圣忍所在号位,R1、R2分别为环奈万圣忍的攻击距离,d为二者攻击距离之差的绝对值。

推导完毕。

推导可能有勘误,欢迎指出。

【来源:bigfun】