Autor Wątek: Obszar kolizji na klatkach animacji - czy ma sens?  (Przeczytany 939 razy)

Offline kwonitf

  • Użytkownik

# Kwiecień 19, 2012, 11:44:54
Witam,
robię sobie prostą gierkę 2D w ramach treningu i nauki.
Uzywam C++\OpenGL wcześniej używałem C++\SDL ale w zasadzie w moim pytaniu technologia nie ma znaczenia, bardziej chodzi o podejście.
Do rzeczy:
Napisałem sobie automat, który pozwala mi definiować animacje poklatkowe ze spriteów gdzie klatki mogą mieć różne szerokosci/wysokosci i czas trwania.
No i dajmy na to mam chłopka który posiada powiedzmy założony na plecach sterczący do góry kij.
Chłopek ten powiedzmy potrafi bić pięścią w przód.

I teraz jak wiadomo klatka taka jest prostokątem.
Chciałbym aby jeśli np jakis pocisk trafi ludka to ranił go gdy trafi w obręb ciała ludzika, a nie we wspomniany wyżej kij. Podobnie chciałbym by ludzik ranił gdy trafi jego pięść.

I tu moje pytanie czy jest sens definiowanie również obszarów kolizji na klatkach animacji?
Np obszar który ma być sprawdzany przy trafieniu w ludzika oraz obszar na jego pięści, który bedzie brany pod uwagę przy spawdzaniu kolizji gdy ludzik bije?
Czy takie podejście w ogóle ma sens? Jeśli nie, to jak powinno się to robić w tego typu grach?

Z góry dziękuję za wszelkie sugestie i próby naprowadzenia.
Pozdrawiam

Offline Mr. Spam

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

Offline flexi

  • Użytkownik

# Kwiecień 19, 2012, 11:54:28
Mam pewnien pomysl ale niewiem gdzie ten kij jest. Moglbys pokazac jedna klatke ?

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Kwiecień 19, 2012, 12:03:45
Cytuj
I tu moje pytanie czy jest sens definiowanie również obszarów kolizji na klatkach animacji?
Jak najbardziej.

Cytuj
Czy takie podejście w ogóle ma sens? Jeśli nie, to jak powinno się to robić w tego typu grach?
Jeśli dobrze kojarzę, to robi się zazwyczaj właśnie tak, jak napisałeś - zaznacza regiony kolizji, a w przypadku zadawania ciosu, dodatkowo obszar, gdzie przeciwnik może oberwać. To ostatnie to lekko co innego niż zaznaczanie pięści, bo w przypadku np. ciosu prostego zaznaczasz całą rękę (czyli obszar, w przez który pięść się przemieściła od ostatniej klatki - inaczej sama pięść mogła by np. znaleźć się za głową wroga i cios by nie został wykryty). Oczywiście w klatkach gdzie nie ma ciosu nie musisz tego zaznaczać. :)

Sam sposób zaznaczania to już kwestia gustu. Możesz malować po bitmapie (np. nowa warstwa i jej osobny eksport) ale musisz się liczyć z konsekwencją dość wolnego jej przeszukiwania (sprawdzenie, czy maski kolizji na siebie zachodzą). Alternatywnie możesz zaznaczać regiony, np. przybliżając regiony kołami, kapsułami, prostokątami, itp, gdzie tych kształtów będzie relatywnie mało i sprawdzenie kolizji będzie szybkie. Ale w przypadku bijatyki raczej to znaczenia miec nie będzie (w jednej klatce nigdy nie będziesz miał więcej niż parę ciosów do sprawdzenia - jak nie ma ciosów, albo sprity w ogóle nie kolidują, to nie musisz się pakować w test na poziomie per-pixel).

Offline Zielony

  • Użytkownik
    • Ghurund Engine

# Kwiecień 19, 2012, 12:16:47
Zapoznaj się z definiowaniem obszarów kolizji w M.U.G.E.Nie http://www.elecbyte.com/mugendocs/tutorial3.html

Offline kwonitf

  • Użytkownik

# Kwiecień 19, 2012, 12:37:35
Super, dzięki wielkie za odpowiedzi.
Myślę, że z tymi informacjami już dalej sobie poradzę :)
Jeszcze raz dzięki