Prawidłowe wdrożenie „podwójnego skoku”

23

Pracuję nad grą 2D na iPhone'a, używając Corony (wersja próbna, więc nie mogę korzystać z ich forów). Gra polega na tym, że postać spada z nieba, a ja próbuję wykonać „podwójny skok” dla postaci, aby mógł on podskoczyć podczas upadku. Korzystam z biblioteki fizyki Corony, aby postać spadła, a do tej pory najlepszą metodą skoku go jest metoda impulsu pionowego

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

Problem, z którym się zmagam, polega na tym, że gdy postać dopiero zaczyna (prędkość pionowa jest niska), skacze naprawdę wysoko, a gdy spada przez chwilę (prędkość pionowa jest wysoka), skok jest znikomy. Domyślam się, że najlepszym rozwiązaniem jest użycie jakiegoś równania z prędkością jako danych wejściowych, aby skok był taki sam bez względu na prędkość, ale nie mogę zrozumieć, jakie byłoby to równanie.

Okej, więc to tylko moje myśli. Ostateczne pytanie brzmi: jak dokładnie realizujesz podwójny skok z fizyką? Czy istnieje odpowiednie równanie dla mojego problemu? Czy powinienem przyjąć inne podejście? Zrobiono to już wcześniej w grach takich jak Smash Bros, więc istnieje powtarzalne rozwiązanie, prawda?

Jesse J.
źródło

Odpowiedzi:

37

Po prostu ustaw prędkość pionową na zero i po prostu wywołaj ten sam kod, którego użyłeś do pierwszego skoku.

Adam Harte
źródło
4
O. To ... właściwie działa całkiem dobrze. I tak proste, że teraz czuję się głupio, że o tym nie myślę. No cóż. Dzięki!
Jesse J
5
Często kuszenie sprawia, że ​​sprawy stają się bardziej skomplikowane, niż muszą być :)
Adam Harte
2
elegancka odpowiedź!
lathomas64
1

Nie jestem pewien, ale myślę, że gry takie jak UT2K4 mogą używać logiki w następujący sposób:
jeśli (już skoczyłem &&! Dwukrotnie skoczyłem jeszcze &&! Dotykając ziemi && velocity.up wynosi około 0,0f) DoDoubleJump ();

Gdzie w górę jest twój komponent y lub z (w zależności od tego, który jest podniesiony)
Oznacza to, że gracz może wykonać podwójny skok tylko wtedy, gdy osiągnie maksymalną wysokość pierwszego skoku i zaraz zacznie ponownie spadać.
Podoba mi się ta metoda, ponieważ stwarza odrobinę umiejętności (musisz zmierzyć czas w „velocity.up wynosi około 0,0f”).
W zależności od tego, czego chcesz, możesz odchylać „około 0,0f” w kierunku liczb dodatnich, aby mogli podskakiwać tylko dwukrotnie, gdy np. Wciąż się poruszasz.

Chris
źródło