DDNET 知识库

中文 Wiki

DDNet Workshop 中文知识库,收录 79 Wiki 词条,涵盖游戏技巧、机制等内容,提升广大玩家游戏理解

移动 Movement
游戏机制•游戏机制

移动 Movement

移动是Teeworlds和DDrace的核心机制,包括重力、跳跃、水平移动和高级技巧

移动Movement重力跳跃水平移动最大速度
2024-01-01

移动是 Teeworlds 和 DDrace 的核心方面之一。

基础

重力

每个 tick 由于重力,加速度 0.5 被添加到 y 速度(向下)。

跳跃

跳跃类型Y 速度设置说明
地面跳跃-13.2按某个值缩放
空中跳跃(二段跳)-12.0按某个值缩放

跳跃特性:

  • 跳跃会设置 y 速度,抵消任何之前的向上或向下速度
  • 这在需要停止大垂直冲量的场景中非常有用

水平移动

不按键时

状态每 tick 速度计算
地面velocity.x = velocity.x * 0.5
空中velocity.x = velocity.x * 0.95

按相反方向键时

状态效果
地面每 tick 水平速度减少 2,直到达到相反方向的 10
空中每 tick 水平速度减少 1.5,直到达到相反方向的 5

按 A 或 D 加速时

状态效果
地面每 tick 水平速度增加 2,直到达到 10
空中每 tick 水平速度增加 1.5,直到达到 5

重要提示:

  • 按住按键时忽略摩擦
  • 因此,在高速度时,什么都不按比向相反方向移动能让 tee 更快减速
  • 因为摩擦会有指数级减速,而 a/d 是线性减速

高级

最大速度

最大速度:6000 子图块/Tick(一个 tick 内的 +加速,例如重力、喷气背包、爆炸)。

源码实现:

cpp
// src/game/gamecore.cpp(在从速度计算新位置之前)
if(length(m_Vel) > 6000)
    m_Vel = normalize(m_Vel) * 6000;

水平移动瓶颈:

  • 垂直移动的瓶颈是 6000 子图块/Tick
  • 在水平移动中,一个"斜坡"值乘以水平速度
  • 导致 tee 在速度过快时减速并停止
  • 这最常见于加速器中

精度问题:

  • 速度每个 tick 向下舍入到 1/256 的精度
  • 这导致 tee 在速度过快时停止水平移动

角落掠过

tee 被认为在地面只是因为它的位置和到地面的距离 —— 它不需要 tee 有向下速度。因此,tee 在向上移动时可能被"接地",只要 tee 掠过图块的角落。

角落掠过的作用:

  1. 允许 tee 刷新其二段跳(在跳过地图如 Impetuous 时有用)
  2. 可以在短时间内对 tee 应用地面加速度和最大速度(假设 tee 的水平空中速度在角落掠过之前小于最大地面速度)

应用场景:

  • 角落掠过不常在地图部分中有意使用(除了 Short and Precise 7 等地图)
  • 但可以在短速通中用作小优化

高处跳跃

即使 tee 在地面上方几个子单位,也可以执行地面跳跃。


小提示

  • 重力每 tick 增加 0.5 的向下速度
  • 地面跳跃速度(-13.2)比二段跳(-12.0)更强
  • 高速时松开按键比按反方向键减速更快(指数级 vs 线性)
  • 最大速度为 6000 子图块/Tick
  • 角落掠过可以刷新二段跳,在某些地图中很有用
  • 即使离地面几个子单位也能执行地面跳跃