水平運動公式

From Minecraft Parkour Wiki
Revision as of 15:23, 3 February 2022 by Pjx1314 (talk | contribs) (Created page with "::<math>E_{t} = (\underset{每级缓慢减少 \; 15\%}{\underset{每级速度增加 \; 20\%}{\underbrace{\left ( 1 + 0.2\times 速度 \right ) \: \times\: \left ( 1 - 0.15\times 缓慢 \right )}}} \geq 0</math>")
Other languages:

在每 tick,遊戲會進行如下三個步驟:

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

我們將從介紹各種乘數開始,盡力使公式可讀性更強。


乘數

移動乘數(參見 45°斜跑


Failed to parse (unknown function "\begin{Bmatrix}"): {\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{每级缓慢减少 \; 15\%}{\underset{每级速度增加 \; 20\%}{\underbrace{\left ( 1 + 0.2\times 速度 \right ) \: \times\: \left ( 1 - 0.15\times 缓慢 \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}}


線性運動公式

These simplified formulas only apply to linear movement (no change in direction). While this condition might seem very restrictive, these formulas are very useful to analyze conventional jumps and momentum We'll later expand on these formulas by including angles.


Definition:
  • is the player's initial speed (default = 0).
  • is the player's speed on tick .


Ground Speed:
Failed to parse (syntax error): {\displaystyle V_{H,t} = \underset{Momentum}{\underbrace{\underset{ }{V_{H,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{Acceleration}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}} \right )^{3}}} }


Jump Speed:
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_{H,t} = \underset{Momentum}{\underbrace{\underset{ }{V_{H,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{Acceleration}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}} \right )^{3}}} + \underset{Sprintjump \; Boost}{\underbrace{\begin{Bmatrix}0.2 & \textrm{Sprinting}\\ 0.0 & \textrm{Else}\end{Bmatrix} }}}


Air Speed:
Failed to parse (syntax error): {\displaystyle V_{H,t} = \underset{Momentum}{\underbrace{\underset{ }{V_{H,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{Acceleration}{\underbrace{\underset{ }{0.02 \times M_{t}}}} }


Complete Formulas

Let's introduce two more variables:

  • , The player's Direction in degrees (defined by their inputs and rotation)
  • , The player's Facing in degrees (defined by their rotation only)


In reality, angles aren't as simple as that, as there are a limited number of significant angles (see Facing and Angles).

For the purpose of simplicity, we'll ignore this fact.


Definition:
  • and correspond to the player's initial velocity.
  • and correspond to the player's velocity on tick

Ground Velocity:
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}) }
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 _{Z,t} = \underset{Momentum}{\underbrace{\underset{ }{V\displaystyle _{Z,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{Acceleration}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}} \right )^{3}}} \times \cos (D_{t}) }
Jump Velocity:
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{Sprinting}\\ 0.0 & \textrm{Else}\end{Bmatrix} \times \sin (F_{t}) }
Failed to parse (syntax error): {\displaystyle V\displaystyle _{Z,t} = \underset{Momentum}{\underbrace{\underset{ }{V\displaystyle _{Z,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{Acceleration}{\underbrace{0.1 \times M_{t} \times E_{t} \times \left (\frac{0.6}{S_{t}} \right )^{3}}} \times \cos (D_{t}) + \underset{Sprintjump \; Boost }{\underbrace{\begin{Bmatrix} 0.2 & \textrm{Sprinting}\\ 0.0 & \textrm{Else}\end{Bmatrix} \times \cos (F_{t})}} }
Air Velocity:
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 (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 _{Z,t} = \underset{Momentum}{\underbrace{\underset{ }{V\displaystyle _{Z,t-1} \times S_{t-1} \times 0.91 }}} \: + \: \underset{Acceleration}{\underbrace{\underset{}{0.02 \times M_{t}}}} \times \cos (D_{t}) }


Stopping Conditions

Horizontal speed is set to 0 if the player hits a wall, or if the speed is considered to be negligible.


Wall Collision:
If the player hits a X-facing wall, then momentum is cancelled and only includes acceleration.
If the player hits a Z-facing wall, then momentum is cancelled and only includes acceleration.
In either of these case, the player stops sprinting.


Negligible Speed Threshold:
If , momentum is cancelled and only the acceleration is left.
If , momentum is cancelled and only the acceleration is left.
In 1.9+, they are compared to 0.003 instead.


Source Code

[...]