Skocz do zawartości

Postać nie ślizga się po ścianie :(


Wojzax

Rekomendowane odpowiedzi

  • Filar Społeczności

postać - kwadrat 2D

ściana - kwadrat 2D Solid

 

poruszanie się postaci:

GML
if(keyboard_check(ord('W'))&&place_free(x,y-max_speed))then

{

y-=max_speed;

}

 

if(keyboard_check(ord('S'))&&place_free(x,y+max_speed))then

{

y+=max_speed;

}

 

if(keyboard_check(ord('D'))&&place_free(x+max_speed,y))then

{

x+=max_speed;

}

 

if(keyboard_check(ord('A'))&&place_free(x-max_speed,y))then

{

x-=max_speed;

}

 

Wszystko jest fajnie dopóki chodzę wzdłuż ścian bocznych i górnych ściany, postać się ślizga. Ale kiedy dotykam jej dolnej krawędzi i chcę iść w bok, postać się zacina :( Czemu tak jest, jak temu zaradzić?

Odnośnik do komentarza
Udostępnij na innych stronach

Zobacz czy to coś da? To jest lepszy sposób sprawdzania takiej kolizji bo używane jest mniej place_free()

Jak dalej haczy to może coś z animacją jest? Maska może się zmienia delikatnie.

GML

var X = 0, Y = 0;

if (keyboard_check(ord('W'))) then

{

Y-=max_speed;

}

 

if (keyboard_check(ord('S'))) then

{

Y+=max_speed;

}

 

if (keyboard_check(ord('D'))) then

{

X+=max_speed;

}

 

if (keyboard_check(ord('A'))) then

{

X-=max_speed;

}

 

if (place_free(x+X,y) x += X;

if (place_free(x,y+Y) y += Y;

Odnośnik do komentarza
Udostępnij na innych stronach

Ja teraz ogarnąłem takie coś i we wszystkich moich gierkach tak robię

GML
if( keyboard_check( ord("D") ) )

{

for(var i=max_speed; i>0; i++)

if(place_free(x+i,y)

{

x+=i;

break;

}

}

Bo jak jest tak jak Ty masz, to jeśli max_speed=10, to nie podejdziesz zaraz do granicy ściany. Wydaje mi się, że jak zrobisz tak jak ja, to będzie git.

(ps. jeśli masz maskę nie kwadratową, tylko kółko, to wystarczy zamienić warunki fora (var i=max_speed; i>2; i++) )

Odnośnik do komentarza
Udostępnij na innych stronach

Sutikku tam chyba --i powinno być a nie ++ : f bo jeśli ++ to nie rozumiem twojego kodu

 

@I am Lord: nie będzie wolne( o ile ma tam być to --i ) bo w większości wypadków for wykona się tylko raz, takie coś jednak nie gwarantuje nam że przy dużych prędkościach nie przelecimy przez przeszkodę

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Tak, kod od Suttiku działa lepiej, dziękuję. A w moim kodzie nie wiem co jest źle, ale jak zmniejszyłem maskę gracza to nagle przestał się zacinać. Dziwne.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

no to, że jak jest wolne 5 px od ściany, a twoja postać rusza się o 6 px co klatke, to w twoim kodzie się na te 5 nie przesunie, a u suttiku tak

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ę...