Правильно реализовать «двойной прыжок»

23

Я работаю над 2D-игрой для iPhone с использованием Corona (пробная версия, поэтому я не могу использовать их форумы). Игра включает в себя падение персонажа по небу, и я пытаюсь реализовать «двойной прыжок» для персонажа, чтобы он мог подпрыгнуть при падении. Я использую физическую библиотеку Короны, чтобы персонаж падал, и до сих пор лучший способ заставить его прыгать - это метод вертикальных импульсов.

object:applyLinearImpulse(0, -0.4, object.x, object.y)

Проблема, с которой я сталкиваюсь, заключается в том, что когда персонаж только начинает (вертикальная скорость низкая), он прыгает очень высоко, а когда он падает некоторое время (вертикальная скорость высока), прыжок незначителен. Я предполагаю, что лучшее решение - использовать какое-то уравнение со скоростью в качестве входных данных, чтобы сделать скачок одинаковым независимо от скорости, но я не могу понять, каким будет это уравнение.

Хорошо, так что это все мои мысли. И последний вопрос: как именно вы реализуете двойной прыжок с помощью физики? Есть ли правильное уравнение для моей проблемы? Должен ли я выбрать другой подход? Это было сделано раньше в таких играх, как Smash Bros, так что есть повторяемое решение, верно?

Джесси Дж
источник

Ответы:

37

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

Адам Харт
источник
4
Ой. Это ... на самом деле работает довольно хорошо. И так просто, что теперь я чувствую себя глупо, не думая об этом. Ну что ж. Благодарность!
Джесси Дж
5
Часто бывает заманчиво сделать вещи более сложными, чем они должны быть :)
Адам Харт
2
элегантный ответ!
lathomas64
1

Я не уверен, но я думаю, что игры, подобные UT2K4, могут использовать такую ​​логику:
if (уже прыгнул &&! Удвоился, прыгнул еще &&! Касаясь земли && speed.up составляет приблизительно 0,0f) DoDoubleJump ();

Где вверх - ваш компонент y или z (в зависимости от того, какой из них находится вверх).
Это означает, что ваш игрок может совершить двойной прыжок только тогда, когда он находится на максимальной высоте своего первого прыжка и вот-вот начнет спускаться снова.
Мне нравится этот метод, потому что он создает немного навыков (вам нужно рассчитать время, чтобы это произошло внутри «speed.up составляет примерно 0.0f»).
В зависимости от того, что вы хотите, вы можете сместить «приблизительно 0,0f» в сторону положительных чисел, чтобы они могли только дважды прыгать, когда все еще движутся, например.

Крис
источник