Grabarz Opublikowano 18 Lutego 2010 Udostępnij Opublikowano 18 Lutego 2010 Witam, potrzebuję zrobić system kolizji, użyłem do tego speed=0 ale to nie bardzo się u mnie sprawdza. Mam GM 8.0 pro. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 18 Lutego 2010 Udostępnij Opublikowano 18 Lutego 2010 jeśli załapałem, o co chodzi: speed=0 to zuo, użyj place_meeting przy chodzeniu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 18 Lutego 2010 Udostępnij Opublikowano 18 Lutego 2010 A skąd program będzie miał wiedzieć, czy na ostatnim rysunku iść w górę czy w lewo? Oba kierunki są wolne. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Grabarz Opublikowano 18 Lutego 2010 Autor Udostępnij Opublikowano 18 Lutego 2010 A skąd program będzie miał wiedzieć, czy na ostatnim rysunku iść w górę czy w lewo? Oba kierunki są wolne. A widzisz, ale jak wejście jest małe, to przecież nie będę dokładnie celował w wejście, żeby się dostać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 18 Lutego 2010 Udostępnij Opublikowano 18 Lutego 2010 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 Więcej opcji udostępniania...
M@ILOSZ Opublikowano 19 Lutego 2010 Udostępnij Opublikowano 19 Lutego 2010 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 Więcej opcji udostępniania...
Egzekutor Opublikowano 19 Lutego 2010 Udostępnij Opublikowano 19 Lutego 2010 Omg collision_line tu się nie nada. Najlepiej użyj collision_rectangle Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Grabarz Opublikowano 19 Lutego 2010 Autor Udostępnij Opublikowano 19 Lutego 2010 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 Więcej opcji udostępniania...
Dawidds Opublikowano 19 Lutego 2010 Udostępnij Opublikowano 19 Lutego 2010 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 Więcej opcji udostępniania...
Grabarz Opublikowano 19 Lutego 2010 Autor Udostępnij Opublikowano 19 Lutego 2010 Dzięki, działa idealnie. A mógłby mi ktoś jeszcze ten kod wytłumaczyć, bo ja się dopiero uczę? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Egzekutor Opublikowano 19 Lutego 2010 Udostępnij Opublikowano 19 Lutego 2010 Kliknij na daną funkcję to przeniesie Cię do dokumentacji :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 20 Lutego 2010 Udostępnij Opublikowano 20 Lutego 2010 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 Więcej opcji udostępniania...
Mentoss Opublikowano 26 Lutego 2010 Udostępnij Opublikowano 26 Lutego 2010 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 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ę