靠近、对刀,再到 combo:对刀中Combo条件的定量分析
前面几篇文章处理的都是单次判定的问题:这一下打得对不对、这次攻击能不能开启 combo、这个窗口有多少容错。它们回答的是“某一拍”。
但在实际游戏里,combo 不是凭空出现的,它是一条线走到的结果:
两个人先靠近 → 进入互相能打到的距离 → 开始对刀 → 双方轮流命中、互相推挤 → 直到某一轮,其中一方出现失误,被推着向后走 → 另一方抓住这一下,把他锁住。
combo 就是在这条线的最后一刻开始的,能不能迈过去取决于前面每一步的状态。
这篇文章要问的就是:这条线是怎么一步步走到的。 我们把其中可以量化的部分拆开来看,最后会落到一个很具体的数字上。
一、对刀是什么:10 tick 一循环
1. 一轮对刀里发生了什么
两个人先快速靠近,进入互相都能打到的距离。然后一方先攻击,另一方紧接着攻击:先出手的一方命中,把对方击退;对方挨了这一下之后照样能还手,同样把先出手的人击退一次。
因为玩家的硬直是 10 tick,这一来一往就固定成了一个 10 tick 的循环:每过 10 tick,双方各命中一次。
关键在于:既然两个人都在一直攻击,每一轮对刀其实可以看成同一个对刀的平移——双方推进和后退的轨迹、速度、命中的节奏都一样,变的只是整体的位置。
位置会因为各种原因发生偏移,常见的比如:
- 有人漏了拍:少推进一下,或者干脆没有还手;
- 有人主动远离:放开前进、脱离接触;
- 服务器结算出来的击退偏大或偏小:同一次命中,被推开的距离不一样。
也就是说,对刀就是“同一个对刀,被平移到一批不断变化的位置上”反复进行。决定下一轮能不能开 combo 的,不是招式,而是这一轮结束时两个人停在哪里。
2. 循环的结束:一个足够大的失误
多数轮次里双方都正常点,对刀就这么一直循环下去,直到某一轮出现一个足够大的失误:对方高速后退,对刀没法再按原来的节奏继续。
接下来的走向有两种:好的情况是直接接上 combo;另一种情况是他只是单纯飞出了距离,你需要重新开启一个新的对刀循环——而那个新循环和原来的已经不是同一个了。

二、失误的定义,以及为什么必须有失误
1. 失误的定义
为了计算方便,本文把“失误”定义成一件很具体的事:
从对方收到一次击退的那一刻开始,他连续漏掉了几拍没有攻击。(也就是这几拍他没有按攻击键。)
这是最小的一种失误:他只是没点,别的什么都没做。松开前进、防砍、下蹲,或者任何别的操作,都是比它更严重的失误——只要这种最小的失误够用,那些更严重的自然也够用。
2. “需要几次失误”就是容错
于是“这一轮能不能开 combo”被压缩成一个数字:至少需要对手漏几拍。
- 数字越大,你越依赖对手犯错,越难开;
- 数字越小,越容易开;
- 数字为 0,意思是对手一次都不漏,你也能把他锁住。
3. 为什么必须有失误
前面几篇讲过,combo 的原理是延迟加上客户端插值。在这个原理里,最重要的一项是对方在收到击退之前那几个 tick 的速度:他向后的速度越大,你在距离上占的优势就越大。
而在对方不失误的情况下,他在收到击退之前的最后几个 tick 里速度基本是往前的——他自己也在推进,会把你刚建立起来的那点距离优势吃掉。所以我们基本上必须要对方失误,才有可能开出 combo。
当然,光有失误还不够:还需要对方的硬直已经过去,而且距离刚好落在 combo 的容错范围里。
因此,我们在 0.70 和 0.85 两档击退强度下,穷举了不同距离、不同出手时机的组合,得到每一组条件下能 combo 对方所需要的最少失误次数。
三、两个参数决定需要几次失误
1. 参数一:出手时机
第一个参数是你什么时候还手:被击中、收到击退之后,隔几拍才按下去。下面用 k 表示这件事:
- k = 0:收到击退后立刻还手;
- k = +4:收到击退后等 4 拍再还手;
- k = −2:比收到击退还早出手,也就是抢手。
2. 参数二:当时的距离
第二个参数是这一拍的实际距离,用你眼中对方的距离表示(你按下攻击时,自己客户端算出来的那个距离)。
3. 结果
把每一轮里对手所有可能的点击情况都过一遍,就能得到每个(出手时机,距离)组合需要对手漏几拍。下面这张表按出手时机汇总,击退强度固定为 0.70:
| 出手时机 k | −2 | −1 | 0 | +1 | +2 | +3 | +4 | +5 | +6 |
|---|---|---|---|---|---|---|---|---|---|
| 至少需要对手漏几拍 | 3 | 4 | 3 | 2 | 1 | 1 | 1 | 1 | 开不了 |
距离这一维在上面被压掉了,完整的结果直接看下图(横轴是距离,纵轴是出手时机,颜色是至少需要对手漏几拍,灰色表示这一轮开不了):

四、主要发现:hit select 确实有效
1. hit select 是什么
hit select 是被动的一招:本地被击中之后不立刻还手,隔几拍再出手,然后恢复正常的对刀节奏。
对照第三节的表格,它就是 k = +2 到 +5 那一段。
2. 它把需要对手失误的次数压了下来
从表里直接读出来的结果:
| 出手方式 | 至少需要对手漏几拍 |
|---|---|
| 抢手(k = −1) | 4 |
| 立刻还手(k = 0) | 3 |
| hit select(k = +2 ~ +5) | 1 |
也就是说,同样一轮对刀,只是把出手时机推迟了几拍,需要对手失误的次数就从 4 拍降到 1 拍。
举个具体的例子。同一轮对刀、同一个距离,唯一的差别是对手漏不漏那 1 拍:
| 对比项 | 对手漏 1 拍 | 对手满点 |
|---|---|---|
| 你命中对手 | 4 次 | 4 次 |
| 对手命中你 | 0 次 | 3 次 |
| 对手眼中你的距离(最小值) | 3.27 | 2.59 |
| 40 拍里两人的位置 | 从 −0.9 / 2.8 一路推进到 6.2 / 8.9 | 几乎没动,停在 0.3 / 2.9 |
两边都是“每 10 拍命中一次”,但一边的对手一次都打不出来、两个人被一路推着走;另一边的对手反打了 3 次,两个人在原地缠住。差别不在谁多挨一刀,而在距离能不能被拉开。

3. 击退更强时,甚至不需要对手失误
把击退强度从 0.70 提高到 0.85,整个局面会明显变松:
| 击退强度 | 能开的格位数量 | 最好的结果 |
|---|---|---|
| 0.70 | 115 | 需要对手漏 1 拍 |
| 0.85 | 316 | 需要对手漏 0 拍(有 9 个格位做到) |
在 0.85 下,k = +2、+3、+4 这几档出现了“对手一拍都不漏也能把他锁住”的解——这在 0.70 下是不存在的。

五、对刀过程中不要主动用 hit select
上面说的 hit select 是被动用的:你被对方打中之后,先不还手。但如果在双方正常对拼、谁都没挨打的时候主动停一拍,那就是另一种情况了。
这种主动停顿本质上就是主动失误——你少了一拍攻击,位置和速度就交给了对方。这时候如果距离不对,接下来被 combo 的就是你自己。
所以对刀过程中不要主动这么做,除非确定安全。
六、怎么开 combo
把上面的内容收成几条可以直接用的结论:
- 对刀是一个 10 tick 的循环,输出是“至少需要对手漏几拍”,输入是“你的出手时机”和“当时的距离”;
- 使用 hit select:被打之后不要立刻还手,等 2 到 5 拍再出手,需要对手失误的次数能从 4 拍降到 1 拍;
- 要主动把距离控制到极限距离附近:同一档时机下,距离越靠近自己攻击距离的上限越宽松,最好的解都出现在那里;
- 击退越强,combo 越容易建立。在较强的击退下,甚至存在对手一次都不失误也能锁住的情况;
- 对刀过程中不要主动用 hit select:这一招要在被打之后被动使用,双方正常对拼时主动停一拍等于把节奏让给对方。
七、适用范围
- 本文结论来自 1.8.9 水平面上的对刀模型:只考虑一条水平轴上的距离与击退;
- 只看两档击退强度(0.70 与 0.85),不含跳跃、不含地形与方块;