Autor Wątek: kolizja spritów o nierugularnych kształtach  (Przeczytany 641 razy)

Offline zajmundov

  • Użytkownik

# Kwiecień 24, 2017, 16:59:55
witajcie
piszę w SDL mały projekt i potrzebna mi pomoc z kolizjami. Stworzyłem kiedyś pewien domek i chciałbym aby miał on takie kolizje jak obrys tej bryły na rysunku. Zaplanowałem sobie, że wierzchołki kolizyjne będę przechowywał w tablicy, np. vector. Potem bym w pętli sprawdzał czy gracz ma kolizję z obiektami na mapie. Jeżeli chodzi o gracza to swoją kolizję ustawiłbym mu gdzieś na wysokości butów aby mógł trochę nachodzić na inne sprity.
Czy to jest dobry pomysł? Może ktoś sypnąć pseudo codem abym się naprowadził jakoś?

« Ostatnia zmiana: Kwiecień 24, 2017, 17:02:30 wysłana przez zajmundov »

Offline Mr. Spam

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

Offline JasonVoorhees

  • Użytkownik
    • The Immortal Life of the Son of Jay

# Kwiecień 25, 2017, 13:27:30
Kiedyś programowałem kolizje tak jak piszesz. Obiektowi wielokąt podawałem wektor wierzchołków na podstawie którego generował sobie wektor odcinków. Sprawdzając, czy jeden wielokąt nachodzi na drugi po prostu w pętli sprawdzałem, czy którykolwiek odcinek wielokąta przecina się z którymkolwiek odcinkiem drugiego wielokąta.

Do tego jeszcze dopisałem, żeby podawał punkty przecięcia i wyliczał uśredniony punkt kolizji.

Taka uproszczona matma dzięki zastosowaniu odcinków ;) Na pewno nie jest to jakieś bardzo wydajne rozwiązanie.

Offline zajmundov

  • Użytkownik

# Kwiecień 25, 2017, 16:13:11
zobaczę, może wykorzystam Box2D

Offline Hypersomnia

  • Użytkownik
    • Hypersomnia dev diary

# Kwiecień 25, 2017, 17:42:23
zobaczę, może wykorzystam Box2D

Box2D jest bardzo fajny do takich rzeczy.
Jeżeli potrzebne jest Ci tylko wykrywanie kolizji, bez fizyki, zawsze możesz wykorzystać z Boxa tylko pojedyncze funkcyjki typu b2TestOverlapInfo, b2Distance albo funkcje do rzucania promieni które są obecne dla każdego rodzaju kształtów.