Skocz do zawartości

Zablokowane Jak zmienić grawitacje podczas ruchu?


cortezillo

Rekomendowane odpowiedzi

Witam.

Stworzyłem ruch platformowy taki jak w przykładzie FAQ pkt 13.

Jednak moja postać skacze wysoko ale w bardzo szybkim tempie leci do góry po czym w bardzo szybkim tempie spada.
Bawiłem się zmiennymi bo na mój rozum linijka z ''gravity'' powinna za to odpowiadać a tu bach, żadna linijka nie jest za to odpowiedzialna (?)
przynajmniej dla mnie. Próbowałem już wiele różnych kombinacji z zmiennymi w tym całym algorytmie skryptów ale nic, dalej to samo. 
Zmienne vspeed oraz gravity odpowiadają za to samo a bynajmniej tak to wygląda. Więc jak kolwiek nie ustawie postać za szybko leci do góry i za szybko spada z powrotem na dół.

Jak to zmienić?

Odnośnik do komentarza
Udostępnij na innych stronach

Witaj na GMC !

Przydałoby się wiedzieć jakiej wersji gamemaker'a używasz.Nie wiemy ile wynoszą twoje zmienne,ciężko stwierdzić dlaczego tak się dzieje,podaj nam swój kod.Na początek upewnij się że nie masz w innych eventach wpisanej zmiennej gravity,bardzo możliwe że inny event ustawia Ci ciągle gravitacje na taką jakiej byś nie chciał.

Pozdrawiam.

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
11 godzin temu, cortezillo napisał:

Zmienne vspeed oraz gravity odpowiadają za to samo a bynajmniej tak to wygląda.

 

Jeśli co step ustawiasz vspeed, to może tak to wyglądać, ponieważ:

 

vspeed = 5; // prędkość pionowa 5

gravity_direction = 270; // w dół

gravity = 0.1 // grawitacja = 0.1, zatem co krok zwększaj vspeed o 0.1

// koniec eventu step, następuje przesunięcie postaci o y += 5

// vspeed zostaje zwiększone o 0.1 (bo grawitacja działa w kierunku 270, o 0.1, ma przyspieszać opadanie

// ... engine przechodzi przez kolejne eventy, w tym draw

// ... wchodzi kolejny krok, znów wykonujemy event step

// vspeed jest obecnie równe 5.1

 

vspeed = 5; // UPS! Mimo, że engine ustawił vspeed na 5.1, my w kolejnym kroku nadpisujemy tę wartość nim postać się ruszy! stąd wrażenie.

gravity_direction = 270;

gravity = 0.1;

 

 

 

Jeszcze taki szybki kurs:

 

1) przesuwanie postaci:

x += <wartość>;

y += <wartość>;

powoduje przesunięcie w tejże chwili i w kolejnej linijce kodu X i Y mają nowe wartości.

 

2)

speed = 2;

direction = 50;

 

ustawione zostają:

hspeed = lengthdir_x(speed, direction);

vspeed = lengthdir_y(speed, direction);

 

x i y zostają zwiększone na koniec eventu End Step o hspeed i vspeed

 

3)

hspeed = 5;

vspeed = 2;

 

ustawione zostają automatycznie:

speed = point_distance(0,0, hspeed, vspeed);

direction = point_direction(0,0, hspeed, vspeed);

 

x i y zostają zwiększone na koniec eventu End Step o hspeed i vspeed

 

4) po zmianie X i Y na koniec End Step, zostaje nadana wartość gravity:

 

hspeed += lengthdir_x(gravity, gravity_direction);

vspeed += lengthdir_y(gravity, gravity_direction);

 

(speed i direction zostają zaktualizowane j.w.)

a następnie friction:

 

speed = (abs(speed) > friction) ? (speed - friction) : 0;

 

(hspeed i vspeed zostają zaktualizowane j.w.)

 

 

Mniej więcej działa to tak, aczkolwiek dla niektórych da się podawać ujemne wartości, więc jeszcze bardziej skomplikowanie to się przelicza, ale to powinno rozjaśnić wiele.

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Uzjel zablokował(a) ten temat
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

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