Movement/zh: Difference between revisions
Created page with "关于斜角掠过:" |
Created page with "* 玩家的二段跳将会刷新(在地图 [https://ddnet.org/maps/Impetuous Impetuous] 偷鸡时很好用)。 * 判定玩家在地面时有一小段时间可以利用地面更高的水平加速和限速(注意滞空的加速和限速比在地面小)。" |
||
Line 73: | Line 73: | ||
关于斜角掠过: | 关于斜角掠过: | ||
* 玩家的二段跳将会刷新(在地图 [https://ddnet.org/maps/Impetuous Impetuous] 偷鸡时很好用)。 | |||
* | * 判定玩家在地面时有一小段时间可以利用地面更高的水平加速和限速(注意滞空的加速和限速比在地面小)。 | ||
* | |||
Revision as of 09:19, 28 July 2023
基本移動是 Teeworlds 和 DDrace 的核心操作方式之一。
基礎信息
重力
處於默認重力下的玩家會在豎直方向 Y 軸每遊戲刻增加 0.5 的向下速度。
跳躍
地面跳躍將玩家的豎直速度設置為-13.2 單位。
空中跳躍(二段跳)將玩家的豎直速度設置為-12.0 單位。
跳躍是直接將玩家豎直速度設置為某個值,無視原有的速度。這個特性在用於取消原有的巨大速度時很有效。
水平速度變化
- 在鬆開所有按鍵的情況下:
- 地面減速公式:每遊戲刻減半
velocity.x = velocity.x * 0.5
- 空中減速公式:每遊戲刻減少 5%
velocity.x = velocity.x * 0.95
- 地面減速公式:每遊戲刻減半
- 按下速度相反的方向鍵:
- 地面轉向公式:每遊戲刻減少 2 個單位,直到變成10個單位的反向速度。
- 空中轉向公式:每遊戲刻減少 1.5 個單位,直到變成5個單位的反向速度。
- 按住左或者右(默認為{keypress|A}{keypress|D})的情況下:
- 地面加速公式:每遊戲刻增加 2 個單位,速度上限為 10。
- 空中加速公式:每遊戲刻增加 1.5 個單位,速度上限為 5。
按住左右移動時會無視摩檫力,因此高速前進的時候摩擦減速可能比按住反方向移動鍵更多,因為按住按鍵減速是固定值,但是摩檫減速會因速度增加而增大,從而大於這個固定值。
進階特性
速度上限
Max speed: 6000 Sub-tiles/Tick (+speedup in one tick, e.g. gravity, jetpack, explosion).
src/game/gamecore.cpp
(在利用速度計算玩家下一個位置前有如下代碼):
if(length(m_Vel) > 6000)
m_Vel = normalize(m_Vel) * 6000;
其中內嵌了一個歸一化函數重新計算了速度帶來的影響,是豎直速度的瓶頸由來。而水平方向上則有一個ramp曲線因子,導致玩家在速度過快時減速或者停下。在加速時很容易看見這些現象。
速度的精度有每遊戲刻 個單位的向下捨入誤差。
理論上速度超過一定值後,ramp修正因子應該讓速度穩定到一個固定值。例如說想要保持最大速度為 1,在速度小於 1 時不作修正,而速度大於 1 的時候,比如說 50,則因子應該變為 1/50 ,這樣一來速度就不會超過 1。 但是這樣一來速度達到 257 的時候,修正因子理論上應該為 1/257,但是這個數值比單位刻度1/256要小,因此被捨入為 0,這導致實際上玩家水平速度過大時遊戲表現為停下不動。
斜角掠過
判定玩家處於地面或滯空的根據是玩家位置到地面的距離,而不是向下的速度。因此玩家上升過程中也可能判定為貼地,比如斜向飛行時擦到方塊的角。
關於斜角掠過:
- 玩家的二段跳將會刷新(在地圖 Impetuous 偷雞時很好用)。
- 判定玩家在地面時有一小段時間可以利用地面更高的水平加速和限速(注意滯空的加速和限速比在地面小)。
Corner skimming is not often intentionally used in map parts (except for maps such as Short and Precise 7), but can be used in short speedruns as small optimizations.
Elevated Jump
A ground jump can be performed even if the tee is a few subunits above the ground.