Filar Społeczności Wojzax Opublikowano 7 Lutego 2016 Filar Społeczności Udostępnij Opublikowano 7 Lutego 2016 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 Więcej opcji udostępniania...
I am Lord Opublikowano 7 Lutego 2016 Udostępnij Opublikowano 7 Lutego 2016 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 Więcej opcji udostępniania...
Sutikku Opublikowano 7 Lutego 2016 Udostępnij Opublikowano 7 Lutego 2016 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 Więcej opcji udostępniania...
I am Lord Opublikowano 7 Lutego 2016 Udostępnij Opublikowano 7 Lutego 2016 No tylko że to jest strasznie wolne i lepiej nie przesadzać z ilością obiektów, które mają taki sposób sprawdzania kolizji. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Danielus Opublikowano 8 Lutego 2016 Udostępnij Opublikowano 8 Lutego 2016 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 Więcej opcji udostępniania...
Filar Społeczności ANtY Opublikowano 8 Lutego 2016 Filar Społeczności Udostępnij Opublikowano 8 Lutego 2016 no jakby było -- to by było na pewno bardziej wydajne Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 8 Lutego 2016 Udostępnij Opublikowano 8 Lutego 2016 Taktak, powinno. Mój błąd, przyzwyczajenie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Wojzax Opublikowano 8 Lutego 2016 Autor Filar Społeczności Udostępnij Opublikowano 8 Lutego 2016 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 Więcej opcji udostępniania...
Filar Społeczności ANtY Opublikowano 9 Lutego 2016 Filar Społeczności Udostępnij Opublikowano 9 Lutego 2016 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 Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę