Товарищи специалисты по графону, есть вопрос: из-за чего в игровых движках возможен bunny hopping? Именно не как фича игры(как в том же xonotic), а баг движка. Про всякие wallclimbing'и тоже было бы интересно услышать. Я лично понимаю только почему в Мор. Утопии по диагонали двигаться быстрее.
Вот от сложения векторов по диагонали в quake и избавились, но в определённых условиях эффект всё равно проявлялся, а прыжки нужны для того, чтобы компонент торможения не действовал большую часть времени, пока летишь: http://quake.speeddemosarchive.com/quake/bunnies.html По наследству это перешло в HL и CS.
Общий смысл — заставить упрощённый (не моделирующий физику, так как нажатия кнопок на клавиатуре никаким реальным силам не сопоставить) алгоритм движения либо зарегистрировать больше событий, чем предполагается, в один шаг расчёта (например, кнопка движения вперёд даёт изменение координат в одном направлении, кнопка движения вбок меняет их ещё раз, но перпендикулярно, в результате движемся по гипотенузе), либо создавать их в такой последовательности, в которой ограничения на минимальный период между одним и тем же событием перестанут действовать (например, ускорение при движении по диагонали ограничено, но это ограничение не влияет на движение по диагонали в другом направлении, поэтому их можно быстро чередовать и двигаться быстрее).
@kerrigan Не недофизики, а необходимости изображать плавное движение опосля дискретного сигнала с клавиатуры. Что означает короткий щелчок по клавише поворота в автогонке? Что руль очень быстро повернули на 100%, а потом так же быстро вернули обратно? Что его быстро повернули, но чуть-чуть? Что его быстро повернули, но возвращаться в центральное положение он будет после отпускания кнопки автоматически и медленно? Что он вообще не будет возвращаться, пока кнопку поворота в обратную сторону не нажмёшь? Всё это заставит машину двигаться по-разному, и всё, скорее всего, будет совершенно не удобно игроку.
@anonymous Хуйню написал. Если с такой частотой читать символы, получишь гонку с контроллером клавиатуры, который может повторять их с разной (меньшей) частотой. Поэтому либо реагируют на низкоуровневые события нажатия/отпускания клавиш, либо устанавливают минимальный период времени, в течение которого кнопка считается нажатой после однократного срабатывания, и продлевают его, если пришёл повтор. В любом случае, график ввода пользователя выглядит как прямоугольный импульс варьирующейся длины, а нужно перемещение персонажей, транспортных средств и прочего виртуального говна, которое выглядит натурально, с плавным разгоном и остановочкой в начале и конце. Кроме того, в момент нажатия мы не знаем, сколько оно продлится. Исходя из этого, работа с клавиатурой настраивается эмпирически, чтобы игрой можно было управлять удобным для человека образом.