Adriann Opublikowano 24 Sierpnia 2017 Udostępnij Opublikowano 24 Sierpnia 2017 Witam serdecznie, produkuję obecnie beat em upa i dodałem różne wysokości: Mam taki oto prosty kod na kolizje z blokami z tym że owe górki również traktuję jako bloki i próbuję dodać do nich warunek niemożliwości chodzenia po nich kiedy jesteśmy niżej. Kod obrazujący wysokości to tylko to yy>yy_high yy to obecna wysokość a yy_high to wartość wysokości obiektu z którym kolidujemy. Ogólnie problem polega na tym że kiedy ustawię blok jako solidny nie da się na niego wchodzić a kiedy solidny nie jest wszystko działa ale często postać utyka w ścianie. ps: nie chcę wyłączać i włączać solida boo pojawi się problem z większą ilością przeciwników spacerujących po mapce//Kolizje horyzontalneif place_meeting(x+hspd_,y,objSLOPE) && yy>yy_high{ while !place_meeting(x+sign(hspd_),y,objSLOPE) { x+=sign(hspd_) } hspd_=0} //Kolizje vertykalne ///To samo co wyżej tylko dla kolizji vertykalnychif place_meeting(x,y+vspd_,objSLOPE) && yy>yy_high{ while !place_meeting(x,y+sign(vspd_),objSLOPE) { y+=sign(vspd_) } vspd_=0} Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 24 Sierpnia 2017 Administratorzy Udostępnij Opublikowano 24 Sierpnia 2017 zrób maskę tylko na ciemno szare (albo przez edycję maski w sprite, albo zrób drugi sprite o połowie wysokości i ustaw origin Y na -wysokość). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adriann Opublikowano 24 Sierpnia 2017 Autor Udostępnij Opublikowano 24 Sierpnia 2017 No bez przesady, maski umiem ogarniać po tylu latach:D Chodzi o to że nie da się chodzić po tym obiekcie mimo iż spełnia opisany wyżej warunek. Przy solidnej masce wcale a przy niesolidnej da się ale czasem utyka w ścianie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 24 Sierpnia 2017 Udostępnij Opublikowano 24 Sierpnia 2017 A tak poza tym to dziwię się że solid/unsolid ma jakieś znaczenie, w końcu nie używasz wbudowanych zamiennych od prędkości. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adriann Opublikowano 24 Sierpnia 2017 Autor Udostępnij Opublikowano 24 Sierpnia 2017 Właśnie z jakiegoś powodu utyka w ścianie, przy normalnych blokach z takim samym kodem ale oddzielnie nie ma tego problemu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 24 Sierpnia 2017 Udostępnij Opublikowano 24 Sierpnia 2017 No a jak masz zrobioną kolizję z podłożem? Po co rodzieliłeś osobno kolizję podłoża i tego bloczku? Zrób to na jedno kopyto i po problemie, chyba że w twojej grze chodzi się w głąb ekranu? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adriann Opublikowano 24 Sierpnia 2017 Autor Udostępnij Opublikowano 24 Sierpnia 2017 Po połączeniu w ogóle nie działa jak powinno //Kolizje horyzontalne if place_meeting(x+hspd_,y,objBLOK) && yy>yy_high { while !place_meeting(x+sign(hspd_),y,objBLOK) { x+=sign(hspd_) } hspd_=0 } x+=hspd_; //Kolizje vertykalne if place_meeting(x,y+vspd_,objBLOK) && yy>yy_high { while !place_meeting(x,y+sign(vspd_),objBLOK) { y+=sign(vspd_) } vspd_=0 } y+=vspd_; Jak wywalę ten kod: yy>yy_high to kolizje działają normalnie(bez solida) ale znowu nie da się chodzić po górkach;p Więc powstaje pytanie, macie pomysł jak wstawić warunek że jeśli cośtam to po tym konkretnym klocku można chodzić? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 25 Sierpnia 2017 Udostępnij Opublikowano 25 Sierpnia 2017 Dobra czym jest objBLOK? Podłożem? (tzn tą trawą?) czy tylko tym bloczkiem szarym? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adriann Opublikowano 25 Sierpnia 2017 Autor Udostępnij Opublikowano 25 Sierpnia 2017 objBLOK jest parentem ścian, górek i ogólnie wszystkich przeszkód, pokażę w załączniku. Te bloki z numerami to maski pagórków. Skakanie i chodzenie po nich jest zabiegiem czysto wizualnym. Jak mówię, szukam możliwości wstawienia wyjątków że jeśli jakaś zmienna to kolizja nie dotyczy tego bloku i można na niego wejść A to efekt który chcę uzyskać: Oczywiście maska gracza to mniej więcej wielkość cienia Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 25 Sierpnia 2017 Udostępnij Opublikowano 25 Sierpnia 2017 "A to efekt który chcę uzyskać" To w takim razie jak go uzyskałeś skoro nie wiesz jak to osiągnąć :)? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adriann Opublikowano 25 Sierpnia 2017 Autor Udostępnij Opublikowano 25 Sierpnia 2017 Jejuuu:D Tak że wyłączyłem kolizje z górką czyli dało się przez nią przechodzić i po niej skakać po czym wstawiłem normalne ściany z jednej strony. Zatem nie działa:d Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 25 Sierpnia 2017 Administratorzy Udostępnij Opublikowano 25 Sierpnia 2017 23 godziny temu, I am Lord napisał: A tak poza tym to dziwię się że solid/unsolid ma jakieś znaczenie, w końcu nie używasz wbudowanych zamiennych od prędkości. Ostatnio to przerabiałem i odkryłem, że... masz obiekt A - gracza masz obiekt B - przeszkodę solid robisz A.x += 5, na koniec stepa GM sam sprawdza, czy jest kolizja z tym solidem, jeśli tak, to x = xprevious! nawet jak nie używasz speeda czy nie masz eventu kolizji z tą rzeczą. Jedyne rozwiazanie to napisać A.x +=5, A.xprevious = A.x; Co do samego problemu, to źle zrozumiałem perspektywę i myślałem, że to ma być widok jak w platformówce. Tak jak masz wymaga faktycznie więcej pokombinowania. Jak znajdę wolny czas może sklecę jakiś przykład, bo za dużo pisania, ale ogólnie bym chyba z solidów zrezygnował na rzecz place_free / position_free (nigdy nie pamietam które przesuwa maskę obecnego obiektu na podaną pozycję, a które sprawdza, czy pixel x,y jest wolny). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 26 Sierpnia 2017 Udostępnij Opublikowano 26 Sierpnia 2017 Pamiętam że robiłem w GM8 Battletoadsy kurcze musiałbym pogrzebać i zobaczyć jak ja tam robiłem ruch. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 26 Sierpnia 2017 Udostępnij Opublikowano 26 Sierpnia 2017 Ja takie rzeczy robię w bardzo prosty sposób. Tak samo jak 3D w GM. Zrób płaską maskę która jest na ziemi i wygląda jak kałuża. Stojąc na ziemi gracz nie może na nią wejść. Teraz ten obiekt ma swoją wysokość np 20. Następnie gracz skacząc manipuluje jakąś zmienną tak? Nazwijmy ją teraz H. Jeżeli H < wysokości obiektu to gracz nie może z nim kolidować. Jeżeli H jest większe to nie bierz pod uwagę kolizji. Ale teraz jeżeli H < wysokości oraz aktualnie spadałeś (coś jak vspeed tylko twój) to ustaw graczowi wartość wysokości obiektu jako aktualną wysokość podłoża i pozwól graczowi się poruszać jakby nie było kolizji z tym obiektem. Ostatnia sprawa to jeżeli wykryjesz ze kolizji znów nie ma to gracz ma znów spaść niżej. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adriann Opublikowano 26 Sierpnia 2017 Autor Udostępnij Opublikowano 26 Sierpnia 2017 Dokładnie tak próbuję to zrobić:) Nie wiem wciąż tylko w jaki sposób gracz ma nie brać pod uwagę kolizji z tym jednym blokiem:D Bo całe skakanie itp jak na gifach już działa, jedynie wykluczanie kolizji Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 26 Sierpnia 2017 Udostępnij Opublikowano 26 Sierpnia 2017 Bardzo proste. Sprawdzasz z jakim obiektem kolidujesz a potem jeżeli moja H (czy cokolwiek używasz dla wysokości) jest >= wysokości bloku to pozawalasz się poruszać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adriann Opublikowano 26 Sierpnia 2017 Autor Udostępnij Opublikowano 26 Sierpnia 2017 Właśnie mniej więcej w ten sposób psuje się kolizja, tylko robiłem nieco odwrotnie//Kolizje horyzontalne if place_meeting(x+hspd_,y,objBLOK) && yy_jump>yy_high // yy jump wysokosc skakania uwzględniająca to gdzie stoimy a yy_high to wysokość bloczku z którym kolidujemy { while !place_meeting(x+sign(hspd_),y,objBLOK) { x+=sign(hspd_) } hspd_=0 } x+=hspd_; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rozwiązanie Threef Opublikowano 26 Sierpnia 2017 Rozwiązanie Udostępnij Opublikowano 26 Sierpnia 2017 To rozumiem że yy_jump było w zakresach -coś do 0? Skacząc robisz tę wartość na minus? Może coś takiego? var col=instance_place(x+hspd_,y,objBLOK); if col && yy_jump>=col.yy_high // yy jump wysokosc skakania uwzględniająca to gdzie stoimy a yy_high to wysokość bloczku z którym kolidujemy { while !place_meeting(x+sign(hspd_),y,col) { x+=sign(hspd_) } hspd_=0 } else { // funkcja spadania } x+=hspd_; Uzjel 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adriann Opublikowano 26 Sierpnia 2017 Autor Udostępnij Opublikowano 26 Sierpnia 2017 Omujborze stary kocham Cię działa:d 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ę