Movement/zh: Difference between revisions
No edit summary Tag: Manual revert |
No edit summary |
||
Line 59: | Line 59: | ||
</syntaxhighlight>其中内嵌了一个归一化函数重新计算了速度带来的影响,是竖直速度的瓶颈由来。而水平方向上则有一个ramp曲线因子,导致玩家在速度过快时减速或者停下。在加速时很容易看见这些现象。 | </syntaxhighlight>其中内嵌了一个归一化函数重新计算了速度带来的影响,是竖直速度的瓶颈由来。而水平方向上则有一个ramp曲线因子,导致玩家在速度过快时减速或者停下。在加速时很容易看见这些现象。 | ||
速度的精度有每游戏刻 <math>\frac{1}{256}</math> 个单位的向下舍入误差。 | 速度的精度有每游戏刻 <math>$\frac{1}{256}$</math> 个单位的向下舍入误差。 | ||
理论上速度超过一定值后,ramp修正因子应该让速度稳定到一个固定值。例如说想要保持最大速度为 1,在速度小于 1 时不作修正,而速度大于 1 的时候,比如说 50,则因子应该变为 1/50 ,这样一来速度就不会超过 1。 但是这样一来速度达到 257 的时候,修正因子理论上应该为 1/257,但是这个数值比单位刻度1/256要小,因此被舍入为 0,这导致实际上玩家水平速度过大时游戏表现为停下不动。 | 理论上速度超过一定值后,ramp修正因子应该让速度稳定到一个固定值。例如说想要保持最大速度为 1,在速度小于 1 时不作修正,而速度大于 1 的时候,比如说 50,则因子应该变为 1/50 ,这样一来速度就不会超过 1。 但是这样一来速度达到 257 的时候,修正因子理论上应该为 1/257,但是这个数值比单位刻度1/256要小,因此被舍入为 0,这导致实际上玩家水平速度过大时游戏表现为停下不动。 |
Revision as of 15:54, 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 偷雞時很好用)。
- 判定玩家在地面時有一小段時間可以利用地面更高的水平加速和限速(注意滯空的加速和限速比在地面小)。
斜角掠過通常不算一種玩家會主動使用的技巧(除了地圖 Short and Precise 7 等),但是在速通時可以考慮一下。
抬升跳
玩家離地少許依舊能夠使用地面跳,因此可以獲取比平地直接跳稍微高一點的高度。