Movement/zh: Difference between revisions

From DDraceNetwork
Darkh (talk | contribs)
Created page with "=== 斜角掠过 ==="
Darkh (talk | contribs)
Created page with "判定玩家处于地面或滞空的根据是玩家位置到地面的距离,而不是向下的速度。因此玩家上升过程中也可能判定为贴地,比如斜向飞行时擦到方块的角。"
Line 69: Line 69:
=== 斜角掠过 ===
=== 斜角掠过 ===


<div lang="en" dir="ltr" class="mw-content-ltr">
判定玩家处于地面或滞空的根据是玩家位置到地面的距离,而不是向下的速度。因此玩家上升过程中也可能判定为贴地,比如斜向飞行时擦到方块的角。
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.
</div>


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

Revision as of 09:09, 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曲线因子,导致玩家在速度过快时减速或者停下。在加速时很容易看见这些现象。

速度的精度有每游戏刻 个单位的向下舍入误差。

理论上速度超过一定值后,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


斜角掠过

判定玩家处于地面或滞空的根据是玩家位置到地面的距离,而不是向下的速度。因此玩家上升过程中也可能判定为贴地,比如斜向飞行时擦到方块的角。

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.