Autor Wątek: [Box2D] Zawieszanie się ciał  (Przeczytany 783 razy)

Offline kijanek6

  • Użytkownik
    • Websplash

# Luty 22, 2010, 01:39:29
Piszę ja sobie platformówkę. Tworzę poziom z kafli 64x64 oraz postać. Każdy kafel, który ma bSolid == 1 ma też statyczne ciało Box2D. Postaci nadaję prędkość za pomocą SetLinearVelocity. Postać się ślizga po kaflach (długiej platformie) i nagle... zacina się w miejscu. Żadna siła nie może jej ruszyć. Zacina się dokładnie na przejściu między jednym kaflem, a drugim. Z tego co przeczytałem na forum Box2D jest to dość powszechnie spotykany problem. Jednak rozwiązania, które tam zaproponowali (łączenie wielu ciał kafli w jedno, itd.) nie rozwiązują mojego problemu, bo co gdy mamy windy, które poruszają się w górę i w dół i w jakimś momencie są poustawiane obok siebie, tworząc w ten sposób jakby platformę? Postać się zatnie. A nie będę przecież co klatkę łączył i rozłączał ciał, bo to by zamordowało FPS, nie mówiąc o skomplikowaniu kodu. Twórca Box2D uparcie twierdzi, że "it's not a bug, it's a feature", więc chyba nici z tego... Z drugiej strony nie widzi mi się nijak pisanie własnej fizyki. Jest na to jakieś rozwiązanie? Jeśli nie, jaki inny silnik byście polecili? Tak, wiem, że mogę googlować i sprawdzać po kolei każdy, ale nie zamierzam marnować kolejnych dni na podpinanie różnych bibliotek pod kod i testowanie, żeby dojść do wniosku, że "to też mi nie pomaga". Wystarczy, że zmarnowałem cztery dni na zabawę z Box2D. Potrzebuję:
1. Mieć możliwość ustawienia callbacka dla sprawdzania, czy ciała mają kolidować czy nie (silnik podaje dwa ciała, ja mu odpowiadam czy ma nastąpić kolizja, czy nie).
2. Fajne by były bajery jak liny, motory i inne, jak w Box2D.
3. Ma nie zawieszać mi ciał na łączeniu dwóch kafli ;D

Offline Mr. Spam

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

bs.mechanik

  • Gość
# Luty 22, 2010, 02:08:15
1. Poczytaj o klasie b2ContactListener. Poza tym, jesli chcesz wylaczyc kolizje pomiedzy jakimis obiektami, mozesz im dac rozny filtr.
2. Liny i motory sa w jointach.

Poza tym, korzystasz z aktualnej wersji boxa?

//edit
poza tym, na laczeniach mozesz leko unosic cialo za pomoca SetXForm. Kolizja nie bedzie wykrywana, wiec cialo powinno sie dalej ruszac ;)
« Ostatnia zmiana: Luty 22, 2010, 02:15:40 wysłana przez bs.mechanik »

Offline kijanek6

  • Użytkownik
    • Websplash

# Luty 22, 2010, 08:46:43
Ad. 1 i 2 - w Box2D wiem, jak to osiągnąć. Jednak z uwagi na ten błąd dotyczący kolizji myślę, jakiego innego silnika mógłbym użyć, wtedy musi on mieć te dwie możliwości ;)

Korzystam z ostatniej stabilnej wersji. Po wgraniu ostatniej rewizji SVN z Google Code wszystko się posypało, a jak przepisałem kod i się skompilowało, to fizyka w ogóle nie działała. :-X

No tak, tylko jak wykryć zacięcie się postaci (lub przejście nad kaflami) utrzymując płynny ślizg? Mogę porównywać pozycje obiektu między klatkami z jej prędkością, ale ruch wtedy będzie się zacinał.