@Kuusandr

Проскакивает контроль прыжка ГГ в сторону, по нажатию двух клавиш. Как переделать управление ГГ?

В игре использую управление ГГ по нажатию клавиш.
По нажатию вправо,влево - ГГ движется соответственно направо, налево. При нажатии вправо+вверх,влево+вверх герой делает прыжок вправо+вверх,влево+вверх. Если делать проверку на флажок взводимый обработчиком нажатия(отпускания) клавиш, то проскакивает задержка между нажатием пользователем клавиши вправо и клавиши вверх. Для меня как пользователя задержка вродебы минимальна, но для компьютера она ощутима и алгоритм проверки связки условий проскакивает все проверки и в результате вместо прыжка с места направо(налево) ГГ начинает двигаться направо(налево).
Как можно разрешить ситуацию?
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 2
dollar
@dollar
Делай добро и бросай его в воду.
Вариант 1 (тупой)
Добавить задержку в 200 мс перед тем, как герой начнет двигаться от клавиш вправо-влево. Это делается просто. В момент нажатия запоминаем текущее время с точностью до миллисекунд.
А условие движения такое: клавиша вправо зажата И время зажатия больше 200 мс

Вариант 2 (легкий)
При нажатии клавиши вверх делать прыжок даже в движении. Собственно, это даже более правильно, чем его не делать. То есть если герой идет достаточно долго вправо (несколько секунд), а потом игрок вдруг нажимает вверх, то герой должен не игнорировать нажатие, а сделать прыжок вправо+вверх. Разве не логично? Тогда проблема решится сама собой.

Вариант 3 (сложный, для комбо)
Если у вас одновременное нажатие вправо+вверх - это какое-то особое комбо, то можно аналогично первому варианту отслеживать время нажатия вправо и в пределах этой задержки разрешать пользователю совершать данное комбо.
То есть при нажатии клавиши вправо нужно запомнить текущее время.
А при нажатии клавиши вверх проверяется условие.
Условие такое: клавиша вверх нажата И клавиша вправо была нажата менее 200 мс назад

Вариант 4 (улучшенный, комбо)
Аналогично предыдущему варианту, только еще нужно сделать откат координат героя на ту позицию, где он нажал клавишу вправо. Ведь это комбо считается только с места?

Вариант 5 (правильный, комбо)
Чтобы не было резких откатов, нужно скорректировать не стартовую координату прыжка, а конечную точку прыжка. Скажем, герой прыгает по параболе. Просчитываем, куда он должен был попасть, если бы прыгал из той точки, где он нажал клавишу вправо. Затем пересчитываем, какая траектория должна быть, чтобы игрок с текущих координат попал бы в ту же точку. Точнее, считаем начальную скорость и направление, чтобы попасть в эту цель.

Вариант 6 (домашнее задание)
В случае, если герой в прыжке может менять направление ускорения стрелками, то нужно подойти к геймдизайнеру и спросить, как быть в этому случае. Ведь в конечном итоге всё зависит от его задумки, какие ощущения у игрока он хотел вызвать.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1. Асинхронно нужно опрашивать клавиатуру и выставлять флаги в переменные перед расчётом кадра.
2. При расчёте кадра - собирать всё воедино и правильно создавать вектор перемещения ГГ.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы