Движение

From DDraceNetwork
Revision as of 23:08, 7 June 2023 by Sedonya (talk | contribs) (Created page with "Прыжок "устанавливает" скорость y, отменяя любую предыдущую скорость вверх или вниз. Это очень полезно в сценариях, где необходимо остановить большой вертикальный импульс.")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Эта страница является заготовкой. Вы можете помочь нам, дополнив и улучшив её.

Движение - один из основных аспектов Teeworlds и DDrace.


Основы

Гравитация

Каждый тик к скорости y (вниз) добавляется ускорение 0,5, вызванное гравитацией.


Прыжки

Прыжки на землю устанавливают скорость y тии на -13.2, увеличенную на значение.

Прыжок в воздух (двойной прыжок) устанавливает скорость y тройника на -12.0, увеличенную на значение.

Прыжок "устанавливает" скорость y, отменяя любую предыдущую скорость вверх или вниз. Это очень полезно в сценариях, где необходимо остановить большой вертикальный импульс.

TODO: 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.
    • Воздух: Каждый тик velocity.x = velocity.x * 0.95.
  • Нажатие клавиши в противоположном направлении:
    • Земля: Каждый такт горизонтальная скорость уменьшается на 2, пока не будет достигнуто 10 в противоположном направлении.
    • Воздух: Каждый тик горизонтальная скорость уменьшается на 1.5 до достижения 5 в противоположном направлении.
  • Увеличение горизонтальной скорости при нажатии a или d:
    • Земля: Каждый тик горизонтальная скорость увеличивается на 2, пока не будет достигнуто 10
    • Воздух: Каждый тик горизонтальная скорость увеличивается на 1.5, пока не будет достигнуто 5.


Трение игнорируется при удерживании нажатой клавиши. Таким образом, при высоких скоростях нажатие ни на что не замедлит тии быстрее, чем движение в противоположном направлении, поскольку трение будет иметь экспоненциальное замедление по сравнению с линейным замедлением a/d.


Дополнительно

Максимальная скорость

Максимальная скорость: 6000 субтилов/тик (+ускорение за один тик, например, гравитация, реактивный ранец, взрыв).

src/game/gamecore.cpp (перед вычислением новой позиции из скорости):

if(length(m_Vel) > 6000)
    m_Vel = normalize(m_Vel) * 6000;

Это узкое место в вертикальном движении. При горизонтальном движении "рампа"-значение умножается на горизонтальную скорость. Это приводит к тому, что тии замедляется и останавливается, когда становится слишком быстрым. Чаще всего это наблюдается при ускорении.

Скорость округляется вниз с точностью каждый тик. Это приводит к тому, что тии перестает двигаться горизонтально при слишком большой скорости.

TODO: * 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), но может быть использована в коротких спидранах в качестве небольшой оптимизации.

TODO: add gif

Прыжок с высоты

Прыжок на землю может быть выполнен, даже если тройник находится в нескольких субъединицах над землей.