Skocz do zawartości

Klawisz skoku przed dotknięciem podłoża


Adriann
 Udostępnij

Przejdź do rozwiązania Rozwiązane przez Adriann,

Rekomendowane odpowiedzi

WItajcie!
Próbuję znaleźć rozwiązanie na sytuację kiedy w platformówce postać kończy skok a ja wciskam przycisk skoku. Obecnie może zacząć skakać dopiero jak dotknie podłogi a ja po dotknięciu ponownie wcisnę skok.
Co mogę zrobić żeby wciśnięty klawisz w obecnej formie przed dotknięciem podłoża sprawił że już po dotknięciu postać skoczy?
 

//Skakanie na tej zasadzie
// PresskeyJump to po prostu keyboard_check_pressed
// a RellskeyJump to  keyboard_check_released
if PresskeyJump && jumps>0
	{
			image_index=0;
	        if jumps>1 vspd = -jspd;else vspd = -jspd*.8;
			jumps-=1;    //
	}
//puszczenie klawisza
if vspd<vspdMax &&  RellkeyJump
	        {
	        vspd/=1.5;
	        }

+Jest kod jak dotykamy podłoża dodaje jumps=2 i jak nie dotykamy to jest alarm ustawiający jumps=0
Tu gość na początku ( 0:34) opisuje problem i pokazuje rozwiązanie ale nie wiem jak je przenieść do gmla


 

Odnośnik do komentarza
Udostępnij na innych stronach

No to bardzo prosto. Zamiast resetować jumps=2 tylko przy kolizji z podłożem wykrywaj też czy ta kolizja będzie za x kratek. Najprostsze rozwiązanie to (nie ważne jakiej funkcji używasz)

place_meeting(x, y+max(0,vspeed+gravity)*2, podłoże)
// *2 jest jako 2 klatki w przyszłość
// max(0,vspeed+gravity) max() robimy by brać pod uwagę tylko gdy postać spada. A same vspeed+gravity to nasza prędkość która będzie się zwiększać o gravity co klatkę

 

Edit: w razie jakby obiekt poruszał się szybciej niż jest jego wysokość to trzeba zastosować collision_line() pomiędzy punktami

Odnośnik do komentarza
Udostępnij na innych stronach

@Threef
Tak tylko wtedy skok się zacznie przed dotknięciem podłoża a ja chcę żeby wciąż po. Chodzi tylko o to żeby zadziałał klawisz skoku przed tą kolizja z podłogą i już po kolizji skoczył. Ciężko mi to wyjaśnić, na filmie gość zrobił to lepiej 😛

Odnośnik do komentarza
Udostępnij na innych stronach

To może mieć zmienną np. doJump = false; i zrobić collision_line na te kilka pixeli w dół od gracza i jeśli wykrywa podłoże oraz vspd > 0 to daje doJump = true; 
a w kodzie zamieścić coś takiego
 

if (PresskeyJump or doJump) && jumps>0
	{
			image_index=0;
	        if jumps>1 vspd = -jspd;else vspd = -jspd*.8;
			jumps-=1;    //
			doJump = false;
	}

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Jeśli ma skoczyć 1-2 klatki po naciśnięciu, to wystarczy tak:

 

if keyboard_key_pressed(klawisz skoku) PresskeyJump == 2;

if (PresskeyJump) {
 // ta część kodu odopowiadająca za skok (najlepiej tylko gdy postać dotyka podłoża)
}

if (PresskeyJump > 0) PresskeyJump--;

 

2 to liczba klatek przez jakie po wciśnięciu klawisza uznawać, że nastąpił skok. Zbyt duża wartość spowoduje jednak niechciane skoki.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...