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?
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.
źródło