水平运动公式

From Minecraft Parkour Wiki
Revision as of 02:41, 4 February 2022 by Pjx1314 (talk | contribs)
Other languages:

在每 tick,游戏会进行如下三个步骤:

  1. 将加速度加到玩家的速度中。
  2. 移动玩家(新的位置 = 原位置 + 速度)。
  3. 降低玩家的速度以模拟阻力。

我们将从介绍各种乘数开始,尽力使公式可读性更强。


乘数

移动乘数(参见 45°斜跑


Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle M_{t} = \begin{Bmatrix}1.3 & \textrm{疾 跑} \\ 1.0 & \textrm{行 走}\\ 0.3 & \textrm{潜 行}\\ 0.0 & \textrm{停 止} \end{Bmatrix} \times \begin{Bmatrix}0.98 & \textrm{正 常}\\ 1.0 & \textrm{45°斜 跑} \\ 0.98 \sqrt{2} & \textrm{45°潜 行} \end{Bmatrix}}


效果乘数(参见状态效果


Failed to parse (syntax error): {\displaystyle E_{t} = (\underset{\textrm{每 级 缓 慢 减 少} \; 15\%}{\underset{\textrm{每 级 速 度 增 加} \; 20\%}{\underbrace{\left ( 1 + 0.2\times \textrm{速 度} \right ) \: \times\: \left ( 1 - 0.15\times \textrm{缓 慢} \right )}}} \geq 0}


滑度乘数(参见滑度


Failed to parse (unknown function "\begin{Bmatrix}"): {\displaystyle S_{t} = \begin{Bmatrix}0.6 & \textrm{正 常}\\ 0.8 & \textrm{史 莱 姆}\\ 0.98& \textrm{冰} \\ 1.0 & \textrm{空 中} \end{Bmatrix}}


线性运动公式

这些简化的公式只适用于线性运动(方向不变)。 尽管这个条件似乎很有限制性,但这些公式对分析常规的跳跃和助跑非常有用。 之后我们将通过引入角度来扩展这些公式。


定义
  • 是玩家的初始速度(正常 = 0)。
  • 是玩家在第 tick 的速度。


地面速度
Failed to parse (syntax error): {\displaystyle V_{H,t} = \underset{\textrm{助 跑}}{\underbrace{\underset{ }{V_{H,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{\textrm{加 速 度}}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}} \right )^{3}}} }


跳跃速度
Failed to parse (syntax error): {\displaystyle V_{H,t} = \underset{助 跑}{\underbrace{\underset{ }{V_{H,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{加 速 度}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}} \right )^{3}}} + \underset{疾 跑 跳 跃 加 成}{\underbrace{\begin{Bmatrix}0.2 & \textrm{疾 跑}\\ 0.0 & \textrm{其 它}\end{Bmatrix} }}}


空中速度
Failed to parse (syntax error): {\displaystyle V_{H,t} = \underset{助 跑}{\underbrace{\underset{ }{V_{H,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{加 速 度}{\underbrace{\underset{ }{0.02 \times M_{t}}}} }


完整公式

让我们引入两个新变量:

  • ,玩家的方向,以度为单位(由玩家按键与旋转角度决定)
  • ,玩家的朝向,以度为单位(仅由玩家旋转角度决定)


实际上,角度并不那样简单,因为有效角的数量是有限的(参见朝向与角度)。

为了简单起见,我们将忽略这一事实。


定义
  • 对应玩家的初始速度。
  • 对应玩家在第 tick 的速度。

地面速度
Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle V\displaystyle _{X,t} = \underset{ }{V\displaystyle _{X,t-1} \times S_{t-1} \times 0.91 } \: + \: 0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}} \right )^{3} \times \sin (D_{t}) }
Failed to parse (syntax error): {\displaystyle V\displaystyle _{Z,t} = \underset{助 跑}{\underbrace{\underset{ }{V\displaystyle _{Z,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{加 速 度}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}} \right )^{3}}} \times \cos (D_{t}) }
跳跃速度
Failed to parse (syntax error): {\displaystyle V\displaystyle _{X,t} = \underset{ }{V\displaystyle _{X,t-1} \times S_{t-1} \times 0.91 } \: + \: 0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}} \right )^{3} \times \sin (D_{t}) + \begin{Bmatrix} 0.2 & \textrm{疾 跑}\\ 0.0 & \textrm{其 它}\end{Bmatrix} \times \sin (F_{t}) }
Failed to parse (syntax error): {\displaystyle V\displaystyle _{Z,t} = \underset{助 跑}{\underbrace{\underset{ }{V\displaystyle _{Z,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{加 速 度}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}} \right )^{3}}} \times \cos (D_{t}) + \underset{疾 跑 跳 跃 加 成}{\underbrace{\begin{Bmatrix} 0.2 & \textrm{疾 跑}\\ 0.0 & \textrm{其 它}\end{Bmatrix} \times \cos (F_{t})}} }
空中速度
Failed to parse (syntax error): {\displaystyle V\displaystyle _{X,t} = \underset{ }{V\displaystyle _{X,t-1} \times S_{t-1} \times 0.91 } \: + \: 0.02 \times M_{t} \times \sin (D_{t}) }
Failed to parse (syntax error): {\displaystyle V\displaystyle _{Z,t} = \underset{助 跑}{\underbrace{\underset{ }{V\displaystyle _{Z,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{加 速 度}{\underbrace{\underset{}{0.02 \times M_{t}}}} \times \cos (D_{t}) }


运动停止条件

如果玩家撞到墙壁,或者速度小到被认为可以忽略不计,那么水平速度就会被设置为 0。


墙壁碰撞
如果玩家撞到 X 轴朝向的墙壁,则助跑部分被取消, 仅保留加速度部分。
如果玩家撞到 Z 轴朝向的墙壁,则助跑部分被取消, 仅保留加速度部分。
在这两种情况下,玩家都会停止疾跑。


可忽略速度阈值
如果 ,助跑部分被取消,仅保留加速度部分。
如果 ,助跑部分被取消,仅保留加速度部分。
在 1.9+,阈值被调整到 0.003。


源代码

[...]