基本移動

From DDraceNetwork
This page is a translated version of the page Movement and the translation is 100% complete.
此條目仍需進行內容補充,您可以幫助我們編輯和修訂以擴充其內容。

基本移動是 Teeworlds 和 DDrace 的核心操作方式之一。


基礎信息

重力

處於默認重力下的玩家會在豎直方向 Y 軸每遊戲刻增加 0.5 的向下速度。


跳躍

地面跳躍將玩家的豎直速度設置為-13.2 單位。

空中跳躍(二段跳)將玩家的豎直速度設置為-12.0 單位。

跳躍是直接將玩家豎直速度設置為某個值,無視原有的速度。這個特性在用於取消原有的巨大速度時很有效。

待辦: Find the bps value or scaled coefficient for these values (same with the horizontal movement, these values are not in bps)


水平速度變化

  • 在鬆開所有按鍵的情況下:
    • 地面減速公式:每遊戲刻減半velocity.x = velocity.x * 0.5
    • 空中減速公式:每遊戲刻減少 5%velocity.x = velocity.x * 0.95
  • 按下速度相反的方向鍵:
    • 地面轉向公式:每遊戲刻減少 2 個單位,直到變成10個單位的反向速度。
    • 空中轉向公式:每遊戲刻減少 1.5 個單位,直到變成5個單位的反向速度。
  • 按住左或者右(默認為AD)的情況下:
    • 地面加速公式:每遊戲刻增加 2 個單位,速度上限為 10。
    • 空中加速公式:每遊戲刻增加 1.5 個單位,速度上限為 5。


按住左右移動時會無視摩檫力,因此高速前進的時候摩擦減速可能比按住反方向移動鍵更多,因為按住按鍵減速是固定值,但是摩檫減速會因速度增加而增大,從而大於這個固定值。


進階特性

速度上限

速度上限:基礎為 6000 方塊每遊戲刻,再加上當前加速度的值,例如重力、噴氣背包、爆炸推力的加速度值(實際上是速度達到上限時,加速度提供了一遊戲刻超出上限的速度,在下一個遊戲刻速度才會被限制回到上限值)

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,這導致實際上玩家水平速度過大時遊戲表現為停下不動。

待辦: * convert sub-tiles/tick into tiles/sec * find max vel und real max vel (from where would a constant function fit) * find speed, where the tee stops moving * write about ramp speed, and add diagram


斜角掠過

判定玩家處於地面或滯空的根據是玩家位置到地面的距離,而不是向下的速度。因此玩家上升過程中也可能判定為貼地,比如斜向飛行時擦到方塊的角。

關於斜角掠過:

  • 玩家的二段跳將會刷新(在地圖 Impetuous 偷雞時很好用)。
  • 判定玩家在地面時有一小段時間可以利用地面更高的水平加速和限速(注意滯空的加速和限速比在地面小)。


斜角掠過通常不算一種玩家會主動使用的技巧(除了地圖 Short and Precise 7 等),但是在速通時可以考慮一下。

待辦: add gif

抬升跳

玩家離地少許依舊能夠使用地面跳,因此可以獲取比平地直接跳稍微高一點的高度。