Autor Wątek: [Solved] Box2D - Kontrola postaci i wzniesienia  (Przeczytany 1643 razy)

Offline Gecio

  • Użytkownik

# Czerwiec 12, 2012, 20:41:10
Witam,
od jakiegoś czasu już pracuję nad prostą grą 2D, z rodzaju side-scrollerów, mocno wzorowaną na Contrze z NESa. Po zaimplementowaniu grafiki i innych modułów przyszedł czas na samą grę, a w pierwszej kolejności fizykę - której symulację powierzyłem bibliotece Box2D. Mały obrazek poglądowy:



Mianowicie mam problem z kontrolą postaci na powierzchniach nierównoległych do osi X. "Założeniem wizualnym" jest jedynie to, że sprite nie podlega obracaniu (b2BodyDef::fixedRotation = true). Początkowo myślałem, że rozwiążę problem spadków zmieniając po prostu tarcie w ustawieniach ciała, lecz daje to niezbyt ciekawe efekty. W internecie - w strzępkach informacji - odnalazłem ciekawe rozwiązanie, które wprowadza koło jako 'motor' (silnik/wlasciwy kontroler) dla postaci (obrazek: niebiesko-fioletowy kontroler). Predkość nadaje się zwiększając prędkość kątową tego koła. Jednakże, te rozwiązanie wydaje mi się mocno przekombinowane, a dodatkowo powoduje, że sam sprite znajduje się wyżej co może nieco utrudniać proces tworzenia map (nieintuicyjne położenie postaci). Ktoś może rozwiązywał już podobny problem i mogłby podzielić się wnioskami?

Pozdrawiam,
Gecio

Rozwiązanie
Wystarczy zbudować po prostu jednokołowy pojazd (zgodnie z obrazkiem powyżej). Działa to świetnie. Dobrym źródłem informacji jest przykład "Car" z SDK Box2D oraz rozdział manuala tegoż o Joint'ach. Z perspektywy czasu uważam, że zbyt wcześnie poleciałem z płaczem na forum ;).
« Ostatnia zmiana: Czerwiec 14, 2012, 01:30:22 wysłana przez Gecio »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Kebab_u_Turka

  • Użytkownik

# Czerwiec 12, 2012, 22:00:01
Nie znam się na Box'ie 2D, ale według mnie, nie głupi jest ten pomysł z motorem.
Aby sprite nie był wyżej, spróbuj zrobić coś w stylu "wyłączenia" kolizji dolnej części sprite'a (albo w ogóle całego sprite'a) z terenem, a zostaw tą kolizje dla motor'a.

Offline Spider100

  • Moderator
    • Strona domowa

# Czerwiec 13, 2012, 00:33:50
Moim zdaniem okrąg połączony z prostokątem to najlepszy pomysł, przykład działania z mojego silnika fizycznego:
http://www.sendspace.com/file/wzy4m7
Oczywiście z IK można dopracować bardziej nogi i nie było by niedokładności chodzenia po spadzie.

Offline Gecio

  • Użytkownik

# Czerwiec 13, 2012, 01:21:52
Dzięki wielkie za odpowiedzi, zaprogramuję tę wersję z kołem u dołu i dam znać jak wyszło + zostawię jakieś wskazówki gdyby się udało dla dalszych ewentualnych szukających. Z tym przesunięciem sprite to rozwiązanie jest oczywiste - nie mam pojęcia co mnie zaćmiło: przesunąć sprite w dół i uciąć wysokość o szerokość i po problemie. Gdyby ktoś znał inne rozwiązania to niech podrzuca mimo to.

Pozdrawiam,
Gecio