Я работаю над 2D-игрой для iPhone с использованием Corona (пробная версия, поэтому я не могу использовать их форумы). Игра включает в себя падение персонажа по небу, и я пытаюсь реализовать «двойной прыжок» для персонажа, чтобы он мог подпрыгнуть при падении. Я использую физическую библиотеку Короны, чтобы персонаж падал, и до сих пор лучший способ заставить его прыгать - это метод вертикальных импульсов.
object:applyLinearImpulse(0, -0.4, object.x, object.y)
Проблема, с которой я сталкиваюсь, заключается в том, что когда персонаж только начинает (вертикальная скорость низкая), он прыгает очень высоко, а когда он падает некоторое время (вертикальная скорость высока), прыжок незначителен. Я предполагаю, что лучшее решение - использовать какое-то уравнение со скоростью в качестве входных данных, чтобы сделать скачок одинаковым независимо от скорости, но я не могу понять, каким будет это уравнение.
Хорошо, так что это все мои мысли. И последний вопрос: как именно вы реализуете двойной прыжок с помощью физики? Есть ли правильное уравнение для моей проблемы? Должен ли я выбрать другой подход? Это было сделано раньше в таких играх, как Smash Bros, так что есть повторяемое решение, верно?
Я не уверен, но я думаю, что игры, подобные UT2K4, могут использовать такую логику:
if (уже прыгнул &&! Удвоился, прыгнул еще &&! Касаясь земли && speed.up составляет приблизительно 0,0f) DoDoubleJump ();
Где вверх - ваш компонент y или z (в зависимости от того, какой из них находится вверх).
Это означает, что ваш игрок может совершить двойной прыжок только тогда, когда он находится на максимальной высоте своего первого прыжка и вот-вот начнет спускаться снова.
Мне нравится этот метод, потому что он создает немного навыков (вам нужно рассчитать время, чтобы это произошло внутри «speed.up составляет примерно 0.0f»).
В зависимости от того, что вы хотите, вы можете сместить «приблизительно 0,0f» в сторону положительных чисел, чтобы они могли только дважды прыгать, когда все еще движутся, например.
источник