From Minecraft Parkour Wiki
由于算术几何序列有明确的公式,我们可以建立非递归函数来计算简单但有用的结果,例如在任一 tick 上玩家的高度,或者在初始速度与持续时间的基础上计算跳跃的距离。
定义:
v
0
{\textstyle v_{0}}
是玩家的初始速度(跳跃之前,
t
0
{\displaystyle t_{0}}
时的速度)
t
{\textstyle t}
是计入的 ticks 数(例如:平地上 t=12,参见跳跃持续时间 )
J
{\textstyle J}
是“跳跃增益”(疾跑跳跃为 0.3274,斜疾跑跳跃为 0.291924,45°无疾跑跳跃为 1.0……)
M
{\textstyle M}
是跳跃后的移动乘数(45°斜疾跑为 1.3,正常疾跑为 1.274,无疾跑45°为 1.0……)
垂直运动(跳跃)[1.8]
跳跃后的垂直速度(
t
≥
6
{\displaystyle t\geq 6}
)
V
Y
(
t
)
=
4
×
0.98
t
−
5
−
3.92
{\textstyle {\textrm {V}}_{Y}(t)=4\times 0.98^{t-5}-3.92}
跳跃后的相对高度(
t
≥
6
{\displaystyle t\geq 6}
)
Failed to parse (syntax error): {\textstyle \textrm{Y}_{rel}(t) = \underset{\textrm{跳跃最高点}}{\underbrace{197.4 - 217 \times 0.98^5}} + 200 (0.98-0.98^{t-4}) - 3.92 (t-5)}
对于
t
<
6
{\textstyle t<6}
的情况,见下文。
垂直运动(跳跃)[1.9+]
跳跃后的垂直速度(
t
≥
1
{\displaystyle t\geq 1}
)
V
Y
(
t
)
=
0.42
×
0.98
t
−
1
+
4
×
0.98
t
−
3.92
{\textstyle {\textrm {V}}_{Y}(t)=0.42\times 0.98^{t-1}+4\times 0.98^{t}-3.92}
跳跃后的相对高度(
t
≥
0
{\displaystyle t\geq 0}
)
Y
r
e
l
(
t
)
=
217
×
(
1
−
0.98
t
)
−
3.92
t
{\textstyle {\textrm {Y}}_{rel}(t)=217\times (1-0.98^{t})-3.92t}
Horizontal Movement (instant jump)
假设玩家在跳跃前已经在空中。
疾跑跳跃后的水平速度(
t
≥
2
{\displaystyle t\geq 2}
)
V
H
(
v
0
,
t
)
=
0.02
M
0.09
+
0.6
×
0.91
t
×
(
v
0
+
J
0.91
−
0.02
M
0.6
×
0.91
×
0.09
)
{\textstyle {\textrm {V}}_{H}(v_{0},t)={\frac {0.02M}{0.09}}+0.6\times 0.91^{t}\times \left(v_{0}+{\frac {J}{0.91}}-{\frac {0.02M}{0.6\times 0.91\times 0.09}}\right)}
疾跑跳跃距离(
t
≥
2
{\displaystyle t\geq 2}
)
Dist
(
v
0
,
t
)
=
1.91
v
0
+
J
+
0.02
M
0.09
(
t
−
2
)
+
0.6
×
0.91
2
0.09
×
(
1
−
0.91
t
−
2
)
×
(
v
0
+
J
0.91
−
0.02
M
0.6
×
0.91
×
0.09
)
{\textstyle {\textrm {Dist}}(v_{0},t)=1.91v_{0}+J+{\frac {0.02M}{0.09}}(t-2)+{\frac {0.6\times 0.91^{2}}{0.09}}\times (1-0.91^{t-2})\times \left(v_{0}+{\frac {J}{0.91}}-{\frac {0.02M}{0.6\times 0.91\times 0.09}}\right)}
注意: 这些公式对于大多数
v
0
{\displaystyle v_{0}}
的值来说都是准确的,但是一些负值会在某个时间点触发速度阈值并重置玩家速度,从而使这些公式不准确。
Horizontal Movement (delayed jump)
假设玩家在跳跃前已经落地(至少在落地后的 1 tick 起跳)
疾跑跳跃的水平速度(
t
≥
2
{\displaystyle t\geq 2}
)
V
H
∗
(
v
0
,
t
)
=
0.02
M
0.09
+
0.6
×
0.91
t
×
(
0.6
v
0
+
J
0.91
−
0.02
M
0.6
×
0.91
×
0.09
)
{\textstyle {\textrm {V}}_{H}^{*}(v_{0},t)={\frac {0.02M}{0.09}}+0.6\times 0.91^{t}\times \left(0.6v_{0}+{\frac {J}{0.91}}-{\frac {0.02M}{0.6\times 0.91\times 0.09}}\right)}
Sprintjump distance (
t
≥
2
{\displaystyle t\geq 2}
)
Dist
∗
(
v
0
,
t
)
=
1.546
v
0
+
J
+
0.02
M
0.09
(
t
−
2
)
+
0.6
×
0.91
2
0.09
×
(
1
−
0.91
t
−
2
)
×
(
0.6
v
0
+
J
0.91
−
0.02
M
0.6
×
0.91
×
0.09
)
{\textstyle {\textrm {Dist}}^{*}(v_{0},t)=1.546v_{0}+J+{\frac {0.02M}{0.09}}(t-2)+{\frac {0.6\times 0.91^{2}}{0.09}}\times (1-0.91^{t-2})\times \left(0.6v_{0}+{\frac {J}{0.91}}-{\frac {0.02M}{0.6\times 0.91\times 0.09}}\right)}
进阶公式
在周期为
T
{\textstyle T}
的助跑上连续疾跑跳跃
n
{\displaystyle n}
次后的水平速度(
n
≥
0
{\displaystyle n\geq 0}
,
T
≥
2
{\displaystyle T\geq 2}
)。
V
H
n
(
v
0
,
T
,
n
)
=
(
0.6
×
0.91
T
)
n
v
0
+
(
0.6
×
0.91
T
−
1
J
+
0.02
M
1
−
0.91
T
−
1
0.09
)
1
−
(
0.6
×
0.91
T
)
n
1
−
0.6
×
0.91
T
{\textstyle {\textrm {V}}_{H}^{\,n}(v_{0},T,n)=\left(0.6\times 0.91^{T}\right)^{n}v_{0}+\left(0.6\times 0.91^{T-1}J+0.02M{\frac {1-0.91^{T-1}}{0.09}}\right){\frac {1-(0.6\times 0.91^{T})^{n}}{1-0.6\times 0.91^{T}}}}
If the first sprintjump is delayed, multiply
v
0
{\textstyle v_{0}}
by 0.6