Sutikku Opublikowano 24 Lipca 2015 Udostępnij Opublikowano 24 Lipca 2015 Nigdy do gier nie dodawałem pojazdów, ale nadszedł taki moment i cóż, jest problem. Do jeżdżenia korzystam z direction, speed i tam image_angle=direction. Jakąś tam prostą kolizję mam, ale problem się zaczyna kiedy przy ścianach skręcam pojazdem, nie poruszając się. Tył bądź przód pojazdu wchodzi w ścianę, a jedyną deską ratunku wtedy jest kręcenie w lewo, w prawo, aż w końcu maska pojazdu wyjdzie z bloczków. Nie mam nawet za bardzo pojęcia jak się za to zabrać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 24 Lipca 2015 Udostępnij Opublikowano 24 Lipca 2015 Rozwiązanie tego problemu jest proste, ale zaraz natrafisz na inne. Ogółem są 2 szkoły rozwiązywania kolizji. Pierwsza mówi o tym aby pierw sprawdzać czy doszło podczas ruchu dojdzie do kolizji i wtedy zabraniać ruchu. Druga mówi o tym aby korygować błędy powstałe podczas ruchu. Czasami uda się połączyć oba sposoby. To dobrze sprawdzi się drugi. Musisz znać aktualną i przyszłą pozycję. Najnormalniej dokonujesz rotacji jak teraz ale zaraz potem robisz warunek który sprawdza czy był ten ruch ok, i jak nie to cofasz akcję. GML (Obrt w lewo) direction-=1 if(!place_free(x,y)) { direction+=1 } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 24 Lipca 2015 Autor Udostępnij Opublikowano 24 Lipca 2015 Nie mam pojęcia co się dzieje, chyba gdzieś jest jakiś kruczek w kodzie którego nie widzę, ale przy takim czymś: GML if(keyboard_check(ord("A"))) { if!(speed==0) direction+=1; if!(place_free(x, y)) direction-=1; } if(keyboard_check(ord("D"))) { if!(speed==0) direction-=1; if!(place_free(x, y)) direction+=1; } Pojazd czasem wejdzie w ścianę, a wtedy rozpoczyna się magia. Zaczyna się sam kręcić, aż wyjdzie z tego bloczka. edit: Zgubiłem gdzieś klamrę, ale już naprawiłem. Ale pojazd nadal wchodzi czasem w bloczki. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 24 Lipca 2015 Udostępnij Opublikowano 24 Lipca 2015 No to musisz zdiagnozować kiedy to się dzieje. bo może musisz nie tylko odjąć direction ale także speed? Edit: Moje nie dopatrzenie. W tym wypadku wszystko było ok. Wciąż masz ten sam problem, ale jakby ktoś szukał innego rozwiązania: GML while(!place_free(x, y)) { direction+=1; } Dodatkowo, można robić interpolację liniową. Dzięki temu będziesz mieć dokładniejsze kolizje. Bo co w przypadkach gdy obrót o 1 to za dużo, ale możesz śmiało się obrócić o 0.25? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 24 Lipca 2015 Autor Udostępnij Opublikowano 24 Lipca 2015 Pokombinowałem i choć nie jestem w pełni zadowolony z efektu, to na razie działa. Używając samej pętli while miałem freeze gry, więc zrobiłem for na 180 razy i dodaje po 2 direction. 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ę