Правильна реалізація "подвійного стрибка"


23

Я працюю над двома грі iPhone, використовуючи Corona (пробна версія, тому я не можу використовувати їх форуми). У грі входить персонаж, що падає через небо, і я намагаюся здійснити "подвійний стрибок" для персонажа, щоб він міг підстрибнути під час падіння. Я використовую бібліотеку фізики Корони для падіння персонажа, і поки що найкращим методом його стрибка є використання вертикального методу імпульсу

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

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

Гаразд, так це все мої думки. Закінчення питання полягає в тому, як саме ви здійснюєте подвійний стрибок з фізики? Чи є відповідне рівняння для моєї проблеми? Чи варто використовувати інший підхід? Це робилося раніше в таких іграх, як Smash Bros, тому є повторюване рішення, правда?

Відповіді:


37

Просто встановіть вертикальну швидкість на нуль і просто зателефонуйте тому ж коду, який ви використовуєте для першого стрибка.


4
Ой. Це ... насправді працює досить добре. І настільки просто, що зараз я відчуваю себе дурним за те, що не думаю про це. Ну добре. Спасибі!
Джессі Дж

5
Часто спокушати зробити речі складнішими, ніж вони повинні бути :)
Адам Харте

2
елегантна відповідь!
lathomas64

1

Я не впевнений, але я думаю, що ігри типу UT2K4 можуть використовувати таку логіку:
якщо (стрибнув уже &&! Подвоївся ще стрибнув &&! Торкаючись землі && velocity.up приблизно 0,0f) DoDoubleJump ();

Де знаходиться ваш y або z компонент (залежно від того, який з них вгору)
Це означає, що ваш гравець може робити подвійний стрибок лише тоді, коли вони перебувають на максимальній висоті свого першого стрибка і ось-ось почнуть спускатися знову.
Мені подобається цей метод, оскільки він створює трохи навичок (Ви повинні встигнути це всередині "velocity.up приблизно 0,0f").
Залежно від того, що ви хочете, ви можете заперечувати "приблизно 0,0f" у бік додатних чисел, щоб вони могли подвоїтись лише удвічі, рухаючись вгору, наприклад.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.