NukeBoards

Pomoc - [MMF2] Kolizje ze ścianą

kamiledi15 - 01-11-2017, 22:34
: Temat postu: [MMF2] Kolizje ze ścianą
Męczę się z dość głupim problemem. Moja postać porusza się za pomocą Platform Movement Object. Gdy postać wpływa w ścianę, to się zatrzymuje, bo obiekt wykrywa kolizję - logiczne:

Ale, można postać obrócić:

I wtedy siedzi w ścianie i nie może z niej wypłynąć. Mogę dać, że ma wtedy wypłynąć w prawo - ale co, gdy wpłynę z lewej strony? Wtedy też wypłynie w prawo, wbijając się w ścianę jeszcze bardziej. Macie pomysł, jak to rozwiązać?
jarlfenrir - 01-11-2017, 22:49
:
Gorący punkt ustawić dokładnie w środku postaci?
kamiledi15 - 01-11-2017, 22:54
:
Postać jest podzielona na części, ciało składa się z kilkunastu osobnych obiektów i każdy ma swoje punkty. Zresztą, co to zmieni, że punkt będzie na środku?
Próbowałem zrobić, że np gdy postać koliduje ze ścianą i gdy jest po prawej od przeszkody, to ma przesunąć się w prawo i odwrotnie. I działa, ale z kolei gdy wpływa w przeszkodę z dołu lub z góry, to wtedy też zasuwa w lewo lub w prawo, więc znowu źle. Nie wiem, jak to rozwiązać.

[ Dodano: 01-11-2017, 23:26 ]
Dobra, rozbudowałem trochę schemat wykrywania kolizji i jakoś to działa. Niestety muszę to chyba zrobić dla każdej przeszkody osobno (grupowanie wszystkich w jedną grupę nie zdało egzaminu), ale jakoś sobie poradzę. Najwyżej gra zyska z 50 nowych zdarzeń w każdym etapie.
Oskar1101 - 02-11-2017, 07:01
:
Bo model kolizji robi się jako osobny obiekt którego nie obracasz. Zrób model kolizji postaci jako jakiś kwadrat albo lepiej okrąg, ustaw go na środku, ukryj go i sprawdzaj jego kolizje z otoczeniem. Zdecydowana większość gierek 2D ma model kolizji oddzielony od warstwy wizualnej(najczęściej na korzyść gracza bo ten model jest zazwyczaj mniejszy od postaci co daje graczowi dodatkowy margines błędu), a jak potrzebujesz większej precyzji to doczep jeszcze w grupie kilka mniejszych okręgów/boxów do rąk/wystających części i niech podążają za kończynami ale niech się nie obracają.
msg - 02-11-2017, 08:07
:
kamiledi15 napisał/a:
Postać jest podzielona na części, ciało składa się z kilkunastu osobnych obiektów i każdy ma swoje punkty.

W takim przypadku oparcie kolizji o prostokątny detektor miało być zrobione już dawno.

Oskar1101 napisał/a:
Zdecydowana większość gierek 2D ma model kolizji oddzielony od warstwy wizualnej(najczęściej na korzyść gracza bo ten model jest zazwyczaj mniejszy od postaci co daje graczowi dodatkowy margines błędu)

Zdecydowana większość edytorów (w przeciwieństwie do CFa) obsługuje maski kolizji, więc problem może tam nie występować. Tak jest w C2, GMS i Unity np.
kamiledi15 - 02-11-2017, 08:33
:
Jest to jakieś rozwiązanie, tylko z kolei boję się, że przez to postać będzie się zatrzymywać zbyt daleko od przeszkód. Ale zobaczymy, spróbuję, dzięki.
msg - 02-11-2017, 13:09
:
kamiledi15 napisał/a:
boję się, że przez to postać będzie się zatrzymywać zbyt daleko od przeszkód.

Prędzej będzie na niego nachodzić kończynami. IMO detektor powinien być mniej więcej taki:



Rozważ też mechanizm odsuwania się od potencjalnej przeszkody przy obracaniu albo ogólnie pół-automatyczne unikanie kolizji przez zmianę położenia bohatera.
kamiledi15 - 02-11-2017, 13:17
:
Tylko, że postać może się pochylać. Jeśli się schyli tułowiem, to ten prostokąt pochyli się razem z nią i będzie wystawać z tyłu za ogonem i to całkiem sporo. Czyli tam, gdzie teraz jest lewa ręka, tam by był prostokąt, przy niezmienionej pozycji ogona. Ale generalnie już sobie chyba poradziłem, rozbudowałem trochę kod i jakoś to działa.

[ Dodano: 04-11-2017, 18:14 ]
Znalazłem rozwiązanie. Gdy postać uderzy w przeszkodę, to odwracają jej się prędkości X i Y i po prostu się odbija, tym mocniej, im szybciej się poruszała. I tak jednym ruchem naprawiłem swój problem. I nawet lepiej to wygląda, gdy postać się odbije, niż gdy nagle wyhamuje.