Skocz do zawartości

Animacje postaci


Przejdź do rozwiązania Rozwiązane przez Czołg Krymski,

Rekomendowane odpowiedzi

Hej tam po drugiej stronie monitora :bye1:

 

Pytanie raczej luźne, czysto informacyjne, które pomoże mi nieco znaleźć drogę do łatwiejszego programowania^^
Jak radzicie sobie z animacją postaci? Ostatnio myślałem, czy zrobienie czegoś na podobiznę animowania postaci z Unity byłoby dobrym pomysłem w GM. Dotychczas robiłem to na dwa sposoby. Animacje postaci wkładałem razem z kodem sterowania i to jest pierwszy sposób, od którego chyba każdy zaczynał. Później próbowałem to robić bardziej przejrzyście i animacje postaci wkładałem do osobnego skryptu z podpisem "animacje". A co gdyby zrobić taki "animator controller" jak jest w Unity. Zrobić prowizoryczne, tekstowe drzewko w skrypcie. Strata czasu czy dobry pomysł? Chciałbym poznać wasze sposoby, gdzie umieszczanie kod na animacje postaci. 
Pozdrawiam i gratuluje ładnej szaty graficznej forum ^_^ (chociaż sentyment do starej pozostaje).

Odnośnik do komentarza
Udostępnij na innych stronach

U mnie jest to zawsze maszyna stanów. Ruch, pozycja i input gracza ustala stan. Wszystko musi być na tyle przejrzyste żeby wynikiem był jeden konkretny stan na podstawie którego musi narysować konkretną klatę animacji.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

wszystko w animacji jest względne. GM:S wspiera animowanie w Spine, także to zawsze jest jakaś droga. Ale jednak animowanie szkieletowe wymaga sporo zaangażowania, żeby nie trąciło jakąś tanią flashówką. Pixel art to wiadomo animowanie klatka po klatce i również są do tego dobre softwary, ale często edytor spritów w GM starcza do wielu zadań. Z własnej autopsji jednak pokochałem animacyjny minimalizm powiedzmy i uwielbiam animować przy pomocy trygonometrii. Starczą dwa osobne sprity na nogi i jeden na tułów i przekształcając wartość speed przy pomocy sinusów i uzależniając od tego np image_angle sprita można zdziałać bardzo przyzwoite rzeczy. Bo jednak animacja nie wymaga kunsztu, ale wymaga naturalności, gładkich zmian prędkości, a naprawdę ciężko jest wyeliminować taką koślawość przy animacji szkieletowej albo poklatkowej. Funkcje trygonometryczne nadają się więc do tego perfekcyjnie, a samo zaprogramowanie animacji można zamknąć w 10-20 linijkach i paru zmiennych. Bardzo polecam tę drogę

Odnośnik do komentarza
Udostępnij na innych stronach

@Threef
O tak, stany są wspaniałe. Dopóki ich nie odkryłem, zawsze miałem problem z określeniem kiedy grasz został trafiony. W sumie, kodowanie animacji w ten sposób wydaje się dość fajnym sposobem.

@Czołg Krymski
Po raz kolejny niestety muszę powiedzieć, że jestem bucem z matmy (dlatego też nie daje sobie wielkich nadziei w programowaniu) ale to animowanie z wykorzystaniem trygonometrii bardzo mnie intryguje. Mam wyobrażenie tego jako "najtańszy" sposób na najlepszą animacje postaci. Mały wysiłek = wielki efekt. Mogę gdzieś zobaczyć wykorzystanie Twojego pomysłu? Chodzi mi o efekt końcowy ale i malutkim kodem, albo jakimś krótkim wytłumaczeniem bym nie pogardził. Czekam z niecierpliwością na odpowiedź ^_^

Odnośnik do komentarza
Udostępnij na innych stronach

Z wykorzystaniem trygonometrii i podstawowej matematyki nie trzeba żadnego przykładu. Jeżeli zrobisz 2 nogi postaci i sprawisz żeby jedna noga miała y=ypostaci+sin(czas) a drugaa to samo tylko -sun() to już masz efekt o który chodzi.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności
  • Rozwiązanie

nie no, jeżeli naprawdę jesteś rocznik 97, to siłą rzeczy musiałeś trochę tej wiedzy na matmie zgłębić. Szczerze mówiąc co jak co, ale podstawowa licealna matematyka jest jak najbardziej na miejscu jeżeli chodzi o tworzenie gier. Ale jedynie starczy ci szczątkowa znajomość właśnie trygonometrii i układu kartezjańskiego. To całkowicie starcza, by sprawnie się game makerem posługiwać na moje oko. Jeżeli rozumiesz naturę sinusoidy i masz przestrzenne wyobrażenie jak można ją przekształcać to nie miałbyś z tym najmniejszego problemu. A animowanie przy jej użyciu jest naprawdę proste. Przykładowo jeżeli do poruszania postaci wykorzystujesz zmienną speed, to starczy stworzyć jakąś nową zmienną od animowania np. tułowia postaci (anim=0;). Później w stepie starczy wpisać coś pokroju anim+=speed, a później rysując tułów w draw wystarczy do współrzędnej Y dodać coś w ten deseń: draw_sprite(tulow_spr,0,x,y+sin(anim/20)*20). I teraz sprawa wygląda tak - dziedzina sinusoidy jest zawsze w radianach, czyli jednostkach opartych na pi. Pełen okres sinusoidy wynosi 2 pi, czyli około 6,28. Teraz na chłopski rozum jeżeli speed gracza wynosi mniej więcej 3, to wyciągając sinus z anim ta sinusoida wykona pełen okres w ciągu zaledwie około dwóch stepów (2 pi/3), więc zdecydowanie za szybko. Dlatego trzeba zwykle podzielić to anim na jakąś sensowną liczbę, w tym przypadku 20. Wtedy zakładając, że prędkość rooma to 60, teraz sinusoida wykona jeden okres po mniej więcej właśnie 60 stepach, czyli sekundzie. Do tego starczy pamiętać, że amplituda sinusoidy wynosi 1 (czyli przyjmuje wartości od -1 do 1), więc jeżeli chcesz, by w tej animacji tułów wychylał się np na 20 pixeli, to mnożysz tego sinusa razy dwadzieścia. I to naprawdę wszystko, jeżeli coś pamiętasz ze szkoły to spokojnie szybko to łykniesz i będziesz się tymi sinusami posługiwał biegle. Do tego strasznie to satysfakcjonująca rzecz moim zdaniem :). Wielkim plusem takiego rozwiązania jest też to, że prędkość animacji jest już wtedy automatycznie uzależniona od prędkości gracza, a dodatkowo jeżeli gracz porusza się do tyłu (speed<0), to animacja również automatycznie się odwraca. Dobra, nie mam daru tłumacza, ale mogę szybko wykonać jakiś prosty przykład w game makerze 8.0.

animacja.gmk

Odnośnik do komentarza
Udostępnij na innych stronach

Niestety przykładu nie mogłem pobrać, bo moje konto nie jest do tego upoważnione ( Kod błędu: 2C171/1 )

 

Ale ogarnąłem mniej więcej o co chodzi ^_^ Jeśli postać ma chodzić po sinusoidzie, to taki efekt osiągnąłem. Za chwile zacznę się z tym bawić i pewnie dojdę do jakiegoś ciekawszego efektu. Dziękuje za rady :)

EDIT: Połączyłem jeszcze pomysł od Threefa z nogami i to wygląda naprawdę nieźle. Podoba mi się! Dziękuje ^_^

PS: Tak, jestem 97 ale mam troszkę trudności z matmą. Na maturze zabrakło mi tylko jednego punktu, żeby ją zdać :(

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

@SimianVirus7 no to trzym tutaj http://www.host-a.net/u/zacnie/animacja.rar

ogólnie przyznam, że gdy zrozumiesz naturę sinusów i cosinusów to całkowicie zmieni się twoje spojrzenie na gamemakerowanie. Szczerze to nie ma chyba żadnego aspektu przy tworzeniu gry, gdzie nie można byłoby ich wykorzystać. Orbitowanie obiektów, ruch wody, cykl dnia i nocy, symulowanie fizyki (np sprężystość podłoża). Do tego umiejętnie używając sinusa przy pitchu jakiegoś dźwięku można uzyskać świetne vibrato. Są też sytuacje, gdy chcąc przemieszczać obiekt w różne kierunki zamiast direction i speed można również posłużyć się trygonometrią, przez co ma się lepszy wgląd w to jak ten ruch naprawdę się odbywa i łatwiej wtedy łączyć dwa ruchy ze sobą (wypadkowy wektor). No i na zakończenie taka moja rada - jak możesz gdzieś użyć sinusa, to go użyj :D

Odnośnik do komentarza
Udostępnij na innych stronach

Mistrzu, to wygląda przepięknie. Ja nie zrobiłbym czegoś takiego w tydzień :D a zgaduje, że zajęło Ci to mniej więcej 30 minut. Widzę, że trygonometria ma ogromny potencjał, więc czas na powtórki z książką od matematyki. Jedno mnie tylko zastanawia. Jak uporać sobie z maską, np tej piłki co skacze. Jej maska ciągle jest na jednej wysokości, gdy sprite hula w górę i w dół. Ale z tym mam nadzieje jakoś sobie poradzę :like:

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...