Autor Wątek: Box2d kolizja Nieregularnych kształtów i niszczenie podłoża  (Przeczytany 2176 razy)

Offline matig16

  • Użytkownik

# Wrzesień 20, 2010, 21:52:10
Mam pytanie dotyczące box2d, wiem jak zrobić kolizje kwadratu i kółka ale nie wiem jak zrobić kolizje takiego np wielokątu, i też nie wiem jak zrobić żeby np rakieta wpadała w ziemie i nagle robiła dziure w tej ziemi tak jak to było w wormsach. Z góry dzięki za pomoc

Offline Mr. Spam

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

Offline Avaj

  • Użytkownik

# Wrzesień 20, 2010, 22:03:20
Jeśli miałbym robić zniszczalny teren, to porzuciłbym Boxa2D i robiłbym ręcznie kolizję na pikselach a mapę zapisał jako obrazek

Offline matig16

  • Użytkownik

# Wrzesień 21, 2010, 10:15:12
Właśnie myśle czy nie dało by rady w box2d zrobić kolizje po pixelu i miałbym problem z głowy.

bs.mechanik

  • Gość
# Wrzesień 21, 2010, 11:46:55
Defaultowo w boxie 2d masz shape'y od kolizji ktore maja 8 wierzcholkow (mozna to zmienic ;) ). Kolizje nieregularnych ksztaltow, z punktu widzenia API, nie roznia sie niczym od pozostalych kolizji. Dla b2PolygonShape wolasz metode Set gdzie przekazujesz wierzcholki w formacie b2Vec. Wazne jest tylko to, by wierzcholki te byly zdefiniowane wzgledem lokalnego srodka modelu. Tyle.

Zniszczalny teren da sie zrobic, aczkolwiek trzeba bedzie z deczka pokombinowac :)

Offline matig16

  • Użytkownik

# Wrzesień 21, 2010, 17:25:39
No to tak sobie myślałem że np taka rakieta będzie miała jakieś pole rażenia, i jak znajdą się w tym polu rażenia pixele z bitmapy od podłoża to się usuwają, nie za bardzo wiem jak to zrobie w allegro ale dobra, i teraz nie mam pojęcia jak zrobić tę kolizje tego nowego podłoża :(.

bs.mechanik

  • Gość
# Wrzesień 21, 2010, 21:20:48
Jesli chcesz miec zniszczenia w postaci wycinkow okregow (z tego co pamietam w wormsach tak bylo), to box2d spokojnie to obsluzy :) Jedna wysepke mozesz oblsuzyc kilkunastoma shape'ami, a pozniej tylko odpowiednio je wycinac.

Offline matig16

  • Użytkownik

# Wrzesień 21, 2010, 21:26:09
Tylko nie wiem właśnie jak sobie po wycinać te kółka z okręgów w terenie ;(

bs.mechanik

  • Gość
# Wrzesień 21, 2010, 21:33:16
Mozliwe ze to strzelanie z armaty do muchy, ale mozna to zrobic tak http://pl.wikipedia.org/wiki/CSG. Mowiac szczerze nie wiem czy to nadaje sie do 2d, ale imho nie powinno byc problemu.
:)

Offline matig16

  • Użytkownik

# Wrzesień 21, 2010, 21:40:52
Dzięki za pomoc, spróbuje pokombinować z tym CSG  :)

Offline rm-f

  • Użytkownik
    • Tu trolluje

# Wrzesień 21, 2010, 21:42:22
Dzięki za pomoc, spróbuje pokombinować z tym CSG  :)
Armata na muchę :P

Offline matig16

  • Użytkownik

# Wrzesień 21, 2010, 21:57:42
Dzięki za pomoc, spróbuje pokombinować z tym CSG  :)
Armata na muchę :P

To jakbyś ty to zrobił ?

bs.mechanik

  • Gość
# Wrzesień 21, 2010, 22:12:46
A przyznam, problem dosc ciekawy w tego typu srodowiskach. Tez poslucham :)

Offline Xirdus

  • Redaktor

# Wrzesień 21, 2010, 22:19:04
A może zrobić tak, by wziąć wszystkie piksele terenu od x wybuchu - promień do x wybuchu + promień dla szerokości i analogicznie dla wysokości, a potem testować czy odległość piksela od wybuchu jest mniejsza bądź równa promieniowi?

Offline rm-f

  • Użytkownik
    • Tu trolluje

# Wrzesień 21, 2010, 22:49:26
To jakbyś ty to zrobił ?
Pomijajac typowe per-pixel*




Czerwone -> krawędzie znajdują się całkowicie w kole, usuwamy.
Niebieskie -> przycinamy
Czerwono-Niebieskie (brak na obrazku) -> wiadomo, dzielimy na 2 i przycinamy

Następnie mając zapamiętane wszystkie przycięte krawędzie sprawdzasz wszystkie przedziały, te które promienie (wyprowadzone z środka koła) przecinają nieparzystą i niezerową ilość krawędzi mapy, znaczy że trzeba zabudować ten przedział odcinkami.

Po tym czymś będzie już gitara**.


*a znalazłem przyjazną dla cache metode do sprawdzania kolizji ;)
** wymyślone na poczekaniu.

Offline matig16

  • Użytkownik

# Wrzesień 23, 2010, 21:45:48
Tak dalsza cześć mojej walki z box2d, teraz mam problem z Sensorem bo w końcu muszę jakoś wykrywać to co mam usunąć w podłożu. Próbowałem, szukałem ale nic z tego nie wyszło a na pewno nie Sensor. Więc znowu was proszę o pomoc ;).