Skocz do zawartości

System kolizji


Grabarz

Rekomendowane odpowiedzi

Czyli gdy kierunki do obu wciśniętych klawiszy są wolne to program ma iść w te, które według niego jest małym wejściem...?

Wiem po co Ci to, ale wyjaśnij, jak chcesz aby to działało :)

 

Hmm, bohater rusza się w 4 czy 8 kierunkach? Bo nigdzie o tym nie pisałeś, a ja nie wiem czemu przyjąłem, że w 4 :P

Bo jak w 8 to raczej nie problem.

Odnośnik do komentarza
Udostępnij na innych stronach

Ja bym to zrobł tak (w step)

GML
if collision_line(x,y,x+32,y,murek_obj,false,1) and keyboard_check(vk_up) and keyboard_check(vk_left)

{

if collision_line(x,y,x,y+32,murek_obj,false,1)

{

y -= 1

}

else

{

x -= 1

}

 

}

 

I to działa tylko gdy masz wciśnięte naraz strzałki w górę i w lewo, i jak masz obiekt o wymiarach 32x32.

Odnośnik do komentarza
Udostępnij na innych stronach

Czyli gdy kierunki do obu wciśniętych klawiszy są wolne to program ma iść w te, które według niego jest małym wejściem...?

Wiem po co Ci to, ale wyjaśnij, jak chcesz aby to działało :)

 

Hmm, bohater rusza się w 4 czy 8 kierunkach? Bo nigdzie o tym nie pisałeś, a ja nie wiem czemu przyjąłem, że w 4 :P

Bo jak w 8 to raczej nie problem.

No, w 8 kierunków.

Odnośnik do komentarza
Udostępnij na innych stronach

GML
repeat(6)

{

h = (keyboard_check(vk_right) && place_free(x+1, y)) - (keyboard_check(vk_left) && place_free(x-1, y));

v = (keyboard_check(vk_down) && place_free(x+h, y+1)) - (keyboard_check(vk_up) && place_free(x+h, y-1));

 

if(abs(h) + abs(v) > 1)

{

h /= sqrt(2);

v /= sqrt(2);

}

 

x += h;

y += v;

}

Nie testowane, ale powinno działać.

Jeśli nie chcesz korygować prędkości po przekątnych wywal ifa.

Odnośnik do komentarza
Udostępnij na innych stronach

H oznacza, w ktora strone (1-prawo, -1-lewo,0-nie rusza sie poziomo) poziomo gracz powinien isc - z tym szczegolikiem, ze jesli chce isc w np lewo a nie moze to to sie nie policzy. V to samo tylko pionowo. Jesli suma ich wartosci bezwsglednych jest > 1 (ruch i poziomo i pionowo, po przekatnej) to obie dzielimy przez pierwiastek z 2 (wzor na przekatna kwadratu)(aby po przekatnej nie szedl szybciej niz normalnie). A precyzje uzyskujemy ruszajac sie zamiast raz o 6px szesc razy o 1px :)

Odnośnik do komentarza
Udostępnij na innych stronach

W FAQ masz ruch platformowy... użyj tego z lewo, tego z prawo, ze strzałki w góre, a w dół wpisz gore zamieniając + na -... w kolizje z twoim blokiem wpisz to, co tam jest, tylko 4 razy (lewo, prawo, gora, dol) czyli:

 

GML
move_contact_solid(/*i tu w każdym inne wpisujesz - a mianowicie 0, 90, 180, 270*/,4)

/*w 270 i w 90 wpisz*/ (vspeed=0)

/*a w 0, i 180*/(hspeed=0)

 

nie zapomnij dać blokowi solida

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ę
  • Ostatnio przeglądający   0 użytkowników

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