基本移动

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

抬升跳

玩家离地少许依旧能够使用地面跳,因此可以获取比平地直接跳稍微高一点的高度。