Movement/zh: Difference between revisions

From DDraceNetwork
(Created page with "<code>src/game/gamecore.cpp</code> (在利用速度计算玩家下一个位置前有如下代码):<syntaxhighlight lang="c++"> if(length(m_Vel) > 6000) m_Vel = normalize(m_Vel) * 6000; </syntaxhighlight>其中内嵌了一个函数重新计算了速度带来的影响,是竖直速度的瓶颈。而水平方向上也有一个ramp曲线因子,导致玩家在速度过快时减速或者停下。在加速时很容易看见这些现象。")
No edit summary
Line 57: Line 57:
if(length(m_Vel) > 6000)
if(length(m_Vel) > 6000)
     m_Vel = normalize(m_Vel) * 6000;
     m_Vel = normalize(m_Vel) * 6000;
</syntaxhighlight>其中内嵌了一个函数重新计算了速度带来的影响,是竖直速度的瓶颈。而水平方向上有一个ramp曲线因子,导致玩家在速度过快时减速或者停下。在加速时很容易看见这些现象。
</syntaxhighlight>其中内嵌了一个归一化函数重新计算了速度带来的影响,是竖直速度的瓶颈由来。而水平方向上有一个ramp曲线因子,导致玩家在速度过快时减速或者停下。在加速时很容易看见这些现象。


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">

Revision as of 03:50, 28 July 2023

此條目仍需進行內容補充,您可以幫助我們編輯和修訂以擴充其內容。

基本移動是 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個單位的反向速度。
  • 按住左或者右(默認為{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曲線因子,導致玩家在速度過快時減速或者停下。在加速時很容易看見這些現象。

The speed is rounded down to a precision of every tick. This is causing the tee to stop moving horizontal when having too much speed.

待辦: * 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


Corner Skimming

A tee is considered on the ground only due to its position and distance to the ground - it does not require the tee to have downwards velocity. So, it is possible for a tee to be "grounded" while traveling upwards, as long as the tee skims the corner of a tile.

Corner skimming:

  • allows a tee to refresh its double-jump (useful when skipping maps such as Impetuous).
  • can apply ground acceleration and max speed to a tee for a short amount of time (assuming the tee's horizontal midair speed is less than the maximum ground speed prior to corner skimming)


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.

待辦: add gif

Elevated Jump

A ground jump can be performed even if the tee is a few subunits above the ground.