Skocz do zawartości
  • Ogłoszenia

  • Gdzie świętować urodziny GMCLANu   33 użytkowników zagłosowało

    1. 1. Gdzie świętować urodziny GMCLANu


      • Warszawa (bo w centrum)
      • Szczecin (bo tam mieszka Ranma i narodził się GMCLAN)

    Żeby zagłosować w tej ankiecie, prosimy się zalogować lub zarejestrować. Zobacz temat
  • 0
cortezillo

Jak zmienić grawitacje podczas ruchu?

Pytanie

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ć?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

3 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

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.

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
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.

 

 

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×