Pablo-GM Opublikowano 25 Grudnia 2012 Udostępnij Opublikowano 25 Grudnia 2012 Witam , powraca odwiecznie nurtujący mnie problem kolizji bohatera ze ścianą . Cholibka player zacina się na nich , chciałbym uzyskać efekt " ślizgania się " . Ktoś jest w stanie mi w tym pomóc ? Swoją drogą przeczesałem dużą część forum - mimo wszystko żadne z rozwiązań mi nie pomogło . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 26 Grudnia 2012 Udostępnij Opublikowano 26 Grudnia 2012 No to spróbujmy swoich sił. Jak masz sterowanie? Po naciśnięciu przycisku zmieniasz x i y? Czy jakoś inaczej? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pablo-GM Opublikowano 26 Grudnia 2012 Autor Udostępnij Opublikowano 26 Grudnia 2012 Metoda może i prymitywna - najważniejsze , że działa : -D GML if keyboard_check(ord('W')) && !keyboard_check(ord('S')) { if keyboard_check(ord('A')) && !keyboard_check(ord('D')) {t nx = x+lengthdir_x(spd1,135); ny = y+lengthdir_y(spd1,135); } else if keyboard_check(ord('D')) && !keyboard_check(ord('A')) { nx = x+lengthdir_x(spd1,45); ny = y+lengthdir_y(spd1,45); } else { nx = x+lengthdir_x(spd1,90); ny = y+lengthdir_y(spd1,90); } if place_free(nx,ny) { x = nx; y = ny; } } if keyboard_check(ord('S')) && !keyboard_check(ord('W')) { if keyboard_check(ord('A')) && !keyboard_check(ord('D')) { nx = x+lengthdir_x(spd1,225); ny = y+lengthdir_y(spd1,225); } else if keyboard_check(ord('D')) && !keyboard_check(ord('A')) { nx = x+lengthdir_x(spd1,315); ny = y+lengthdir_y(spd1,315); } else { nx = x+lengthdir_x(spd1,270); ny = y+lengthdir_y(spd1,270); } if place_free(nx,ny) { x = nx; y = ny; } } if keyboard_check(ord('A')) && !keyboard_check(ord('D')) && !keyboard_check(ord('W')) && !keyboard_check(ord('S')) { nx = x+lengthdir_x(spd1,180); ny = y+lengthdir_y(spd1,180); if place_free(nx,ny) { x = nx; y = ny; } } if keyboard_check(ord('D')) && !keyboard_check(ord('A')) && !keyboard_check(ord('W')) && !keyboard_check(ord('S')) { nx = x+lengthdir_x(spd1,0); ny = y+lengthdir_y(spd1,0); if place_free(nx,ny) { x = nx; y = ny; } } if (!keyboard_check(ord('D')) && !keyboard_check(ord('A')) && !keyboard_check(ord('W')) && !keyboard_check(ord('S'))) move_snap(1,1); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 26 Grudnia 2012 Udostępnij Opublikowano 26 Grudnia 2012 O fuj! Nie wiem po co ci lengthdir'y. Zaraz Ci podeślę sposób jaki użyłem w I accidently made polybius. Wrócę z editem. GML stat_speed=10//Prędkość poruszania if!((keyboard_check(vkey_up) or keyboard_check(vkey_down)) and (keyboard_check(vkey_left) or keyboard_check(vkey_right))) {ss=stat_speed} else {ss=(stat_speed/2)*sqrt(2)} if(keyboard_check(vkey_up)){if(place_free(x,y-32)){y-=ss*dt()}else{move_contact_solid(90,ss*dt())}} if(keyboard_check(vkey_down)){if(place_free(x,y+32)){y+=ss*dt()}else{move_contact_solid(270,ss*dt())}} if(keyboard_check(vkey_left)){if(place_free(x-32,y)){x-=ss*dt()}else{move_contact_solid(180,ss*dt())}} if(keyboard_check(vkey_right)){if(place_free(x+32,y)){x+=ss*dt()}else{move_contact_solid(0,ss*dt())}} Usuń sobie delta_time (dt()) jeśli nie potrzebujesz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 26 Grudnia 2012 Udostępnij Opublikowano 26 Grudnia 2012 Ja zawsze robiłem w ten sposób: GML sp = liczba //event create</span> GML x += sp //event strzalka w prawo</span> GML x -= sp //event strzalka w lewo</span> GML y += sp //event strzalka w dol</span> GML y -= sp //event strzalka w gore</span> GML if(!place_free(x,y)) {x = xprevious; y = yprevious} x = min(room_width,max(0,x)); y = min(room_height,max(0,y)) //event step</span> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pablo-GM Opublikowano 26 Grudnia 2012 Autor Udostępnij Opublikowano 26 Grudnia 2012 I z tym kodem będzie współgrał system kolizji , który wysłałeś mi wcześniej ? EDIT A , nienienienei już przeanalizowałem . PYTANIA NIE BYŁO :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 26 Grudnia 2012 Udostępnij Opublikowano 26 Grudnia 2012 Wszystko opiera się o move_contact_solid. Pomysł ten podsunął Sernat więc to jemu należy dziękować. Ja tylko wykorzystałem wzór na przekątną kwadratu aby poruszanie odbywało się we wszystkich kierunkach z tą samą prędkością. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 26 Grudnia 2012 Udostępnij Opublikowano 26 Grudnia 2012 Threef proszę cię naucz się w końcu pisać kod ładnie. Spójrz na kod Pablo a na swój no po prostu śmiać mi się chce. Ciebie denerwują przecinki Dyzmka a mnie to że ty w ogóle nie używasz spacji i enterów w kodzie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 26 Grudnia 2012 Udostępnij Opublikowano 26 Grudnia 2012 Sorry! To jest akurat przykład kodu "zrób i zapomnij". :D To wszytko ma na celu tylko to że nie muszę scrollować kilku stron, a od razu widzę że ten kod odpowiada za poruszanie i mam go nie ruszać, bo wszystko jest z nim ok. Tak, wiem! Mógłbym zrobić skrypt, ale to też wg mnie nie jest czytelne. Wolę używać osobnych klocków execute code. Szczgólnie odkąd możemy nadawać im etykiety (///Movement). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 26 Grudnia 2012 Udostępnij Opublikowano 26 Grudnia 2012 Cały czas ta sama gadka a jakoś jeszcze nie widziałem u ciebie ani razu ładnie napisanego kodu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 26 Grudnia 2012 Udostępnij Opublikowano 26 Grudnia 2012 Tak już ze mną jest. Przykładam wagę tylko do czytelności kodu który jestem pewien że będę w przyszłości edytował. Tak już lepiej?: ///Other if(on_fire>0) { on_fire-=1 } if(keyboard_check_released(ord("R"))) { sc_blood_part() instance_destroy() } if(y>room_height) { global.txt="You're unlocked an achievement#There's no exit!!" o_controler.alpha=1 instance_destroy() } if(vspeed>20) { vspeed=20 } if(x>0 and x<64 and y>355) { y=40 if(portal=0) { global.txt="You're unlocked an achievement#Think with portals!" o_controler.alpha=1 portal=1 } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 26 Grudnia 2012 Udostępnij Opublikowano 26 Grudnia 2012 Słabo 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ę