SimianVirus7 Opublikowano 12 Stycznia 2020 Udostępnij Opublikowano 12 Stycznia 2020 Dzień Dobry, Aż wstyd mi jest zakładać wątek w tej sprawie, bo po takim czasie, powinienem wiedzieć jak to robić, aczkolwiek nie chce znowu porzucić gm'a poprzez zniechęcenie się, także pytam. Sterowanie jest napisane pod pada, pod analog. Nie mogę sobie poradzić z napisaniem dobrej kolizji. Nasmarowałem coś takiego: Maska kolizji + origin + wymiary bohatera: Maska kamienia jest na precise, a origin ustawiony w środku sprita Kod: axisY = gamepad_axis_value(0, gp_axislv); //zczytaj ustawienie lewego analogu vertykalnie axisX = gamepad_axis_value(0, gp_axislh); //zczytaj ustawienie lewego analogu horyzontalnie if(gamepad_button_check(0, gp_face1)) game_restart(); if(scr_gp_treshold(0, 0.2)) //martwa strefa gałki { dir = point_direction(0, 0, axisX, axisY); //oblicz kierunek spd = (abs(axisX) + abs(axisY))*max_spd; //oblicz spd wraz z przyspieszeniem } else { spd = 0; } motion_set(dir, spd); //nadaj ruch //kolizja if(!place_free(x, y)) { var _id = instance_place(x, y, oRock); var _dirOpposite = point_direction(_id.x, _id.y, x, y); //motion_set(_dirOpposite, spd); while(!place_free(x, y)) { x+=lengthdir_x(.1, _dirOpposite); y+=lengthdir_y(.1, _dirOpposite); } } Efekty tego są takie Przy jednej przeszkodzie, wygląda świetnie: Ale przy kilku mniejszych, osadzonych obok siebie, postać teleportuje się na drugą stronę: Pytania: a) jakieś pomysły, co tu zmienić? b ) mam pooglądać poradniki na YT, bo ten kod do niczego się nie nadaje? c) Czy można skorzystać wbudowanej fizyki w gm:s2 czy lepiej tego nie używać? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 13 Stycznia 2020 Administratorzy Udostępnij Opublikowano 13 Stycznia 2020 a próbowałeś z move_outside_solid zamiast tego while ? Jak dla mnie, to tam gdzieś jest kolizja z dwoma kamieniami na raz i wtedy kierunek od nie tego jest brany, dlatego ten skok. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 13 Stycznia 2020 Udostępnij Opublikowano 13 Stycznia 2020 To wyraźnie wygląda jakby wyjście z kolizji z jednego kamienia wrzuca cię w kolizję z drugim. Dodaj sobie var _id = instance_place(x, y, oRock); show_debug_message(_id) I zobacz czy ID jest wciąż jedno czy więcej. Ogólnie wydaje mi się że wystarczy przy wykryciu kolizji cofnąć do ostatniej pozycji if(!place_free(x, y)) { speed = 0 // moze nie być potrzebne x = xprevious y = yprevious } gnysek 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 20 Stycznia 2020 Autor Udostępnij Opublikowano 20 Stycznia 2020 Niestety, move_outside_solid powodował, że postać wchodziła w ścianę i poruszała się wolniej(?) Natomiast co mnie zdziwiło bardziej, to to, że przykład Threefa, brzmiał w teorii bardzo prosto i wydawałoby się, że powinien zadziałać stu procentowo, czyli "uderzyłeś w ścianę, cofnij się o jeden pixel", co w zupełności nie przełożyło się na praktykę Kod zadziałał tak... jakby go nie było Niemniej dzięki za podpowiedzi inaczej pewnie bym porzucił temat i odłożył GM'a na kolejne miesiące. Poczytałem trochę, pomyszkowałem, poszperałem i mam! Znalazłem i działa bardzo dobrze! https://www.yoyogames.com/blog/432/buttery-smooth-tech-tips-movement 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ę