Horizontal Movement Formulas/zh

在每 tick，游戏会进行如下三个步骤：


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

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

乘数

 * 移动乘数（参见 45°斜跑）


 * $$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}$$


 * 效果乘数（参见状态效果）


 * $$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$$


 * 滑度乘数（参见滑度）


 * $$S_{t} = \begin{Bmatrix}0.6 & \textrm{正 常}\\ 0.8 & \textrm{史 莱 姆}\\ 0.98& \textrm{冰} \\ 1.0 & \textrm{空 中} \end{Bmatrix}$$

线性运动公式
这些简化的公式只适用于线性运动（方向不变）. 尽管这个条件似乎很有限制性，但这些公式对分析常规的跳跃和助跑非常有用. 之后我们将通过引入角度来扩展这些公式. 定义：
 * $$V_{H,0}$$ 是玩家的初始速度（正常 = 0）.
 * $V_{H,t}$ 是玩家在第 $t$  tick 的速度.


 * 地面速度：


 * $$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}}} $$


 * 跳跃速度：


 * $$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}}} + \underset{\textrm{疾 跑 跳 跃 加 成}}{\underbrace{\begin{Bmatrix}0.2 & \textrm{疾 跑}\\ 0.0   & \textrm{其 它}\end{Bmatrix} }}$$


 * 空中速度：


 * $$V_{H,t} = \underset{\textrm{助 跑}}{\underbrace{\underset{ }{V_{H,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{\textrm{加 速 度}}{\underbrace{\underset{ }{0.02 \times M_{t}}}} $$

完整公式
让我们引入两个新变量：
 * $ D_{t} $ ，玩家的方向，以度为单位（由玩家按键与旋转角度决定）
 * $ F_{t} $ ，玩家的朝向，以度为单位（仅由玩家旋转角度决定）

实际上，角度并不那样简单，因为有效角的数量是有限的（参见朝向与角度）.

为了简单起见，我们将忽略这一事实.


 * 定义：
 * $V_{X,0}$ 与 $V_{Z,0}$  对应玩家的初始速度.
 * $V_{X,t}$ 与 $V_{Z,t}$  对应玩家在第 $t$  tick 的速度.


 * 地面速度：


 * $$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}) $$
 * $$V\displaystyle _{Z,t} = \underset{\textrm{助 跑}}{\underbrace{\underset{ }{V\displaystyle _{Z,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}}} \times \cos (D_{t}) $$


 * 跳跃速度：


 * $$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}) $$
 * $$V\displaystyle _{Z,t} = \underset{\textrm{助 跑}}{\underbrace{\underset{ }{V\displaystyle _{Z,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}}} \times \cos (D_{t}) + \underset{\textrm{疾 跑 跳 跃 加 成}}{\underbrace{\begin{Bmatrix} 0.2 & \textrm{疾 跑}\\ 0.0 & \textrm{其 它}\end{Bmatrix} \times \cos (F_{t})}} $$


 * 空中速度：


 * $$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}) $$
 * $$V\displaystyle _{Z,t} = \underset{\textrm{助 跑}}{\underbrace{\underset{ }{V\displaystyle _{Z,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{\textrm{加 速 度}}{\underbrace{\underset{}{0.02 \times M_{t}}}} \times \cos (D_{t}) $$

运动停止条件
如果玩家撞到墙壁，或者速度小到被认为可以忽略不计，那么水平速度就会被设置为 0.


 * 墙壁碰撞：


 * 如果玩家撞到 X 轴朝向的墙壁，则助跑部分被取消，$V\displaystyle _{X,t}$ 仅保留加速度部分.
 * 如果玩家撞到 Z 轴朝向的墙壁，则助跑部分被取消，$V\displaystyle _{Z,t}$ 仅保留加速度部分.
 * 在这两种情况下，玩家都会停止疾跑.


 * 可忽略速度阈值：


 * 如果 $ \left | V\displaystyle _{X,t-1} \times S_{t} \times 0.91 \right | < 0.005 $ ，助跑部分被取消，仅保留加速度部分.
 * 如果 $ \left | V\displaystyle _{Z,t-1} \times S_{t} \times 0.91 \right | < 0.005 $ ，助跑部分被取消，仅保留加速度部分.


 * 在 1.9+，阈值被调整到 0.003.

源代码
[...]