Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

Witam,

od pewnego czasu próbuję stworzyć ręce, które są "luźne".

Po prostu żeby nie były sztywne jak u zombie.

Tylko przy każdym ruchu bohatera robiły naturalistyczne przemieszczenia.

 

Tak jak tutaj:

 

Mógłby ktoś podać jakiś przykład czy pomóc ?

Opublikowano
to jest interpolacja + animacja szkieletowa

 

Animacja szkieletowa no to kapuje.

Zrobić 3 (na początek) sprity, połączyć kodowo, żeby każdy miał swoje direction itp.

 

A ta interpolacja ?

 

[edit]

rozciągnięcia ?

Opublikowano

Interpolacja to funkcja lerp():

GML
wygadzona_pozycja = lerp(pozycja_startowa, pozycja_koncowa, stopien_wygladzenia);

To jest interpoacja liniowa (wygładzenie).

Stopień wygładzenia to wartość z zakresu 0-1

Opublikowano
Interpolacja to funkcja lerp():
GML
wygadzona_pozycja = lerp(pozycja_startowa, pozycja_koncowa, stopien_wygladzenia);

To jest interpoacja liniowa (wygładzenie).

Stopień wygładzenia to wartość z zakresu 0-1

Czyli zrobić animację szkieletową, przy kazdym ruchu zmiana kierunku danych części ciała

A to wszystko trzeba wygładzić interpolacją ?

 

[edit]

A już kapuje, interpolacja tu jest potrzebna żeby nie było przeskakiwania o kilka pixeli tylko płynne przejście ?

Opublikowano
Tak

Dzięki,

a jaki program ( darmowy )polecacie do animacji szkieletowej,

bo ja na jakimś no-name tworzę.

 

Anime Studio chyba jakoś tak to się nazywało, warto w tym pracować ? [edit] tylko że nie jest darmowe :/]

Opublikowano

Jak jesteś hardkorem, to możesz nawet w Notatniku

Jakbym ja miał robić animacje szkieletowe, to albo napisałbym sobie własny edytor, albo skorzystał z Blendera i ignorował jeden z wymiarów.

Opublikowano
Skleiłem ci przykład jak używać interpolacji.

 

Pokazuję tutaj jak przesunąć płynnie kulkę z jednego punktu do drugiego

https://gmclan.org/up539_4_Interpolacja_gmx.html

 

LPM rusza kulką

scroll ustawia siłę interpolacji

 

To jest podobne do funkcji friction

 

Jak jesteś hardkorem, to możesz nawet w Notatniku

Jakbym ja miał robić animacje szkieletowe, to albo napisałbym sobie własny edytor, albo skorzystał z Blendera i ignorował jeden z wymiarów.

 

To powiedz jak zrobić taki edytor, jak tak pomysłem błysnąłeś...

 

 

[eidt]

tylko że w friction kończy się jak speed się skończy, a tu jak dojdzie do celu

Opublikowano

interpolacja to po prostu plynna zmiana wartosci wynikowej wzgledem wartosci wejsciowej (najczesciej czasu), wiec tak - dziala na wszystkim, bo twoja wartoscia wynikowa jest na przyklad rotacja.

 

btw. wiesz co oznacza naturalizm, right? :>

Opublikowano
interpolacja to po prostu plynna zmiana wartosci wynikowej wzgledem wartosci wejsciowej (najczesciej czasu), wiec tak - dziala na wszystkim, bo twoja wartoscia wynikowa jest na przyklad rotacja.

 

btw. wiesz co oznacza naturalizm, right? :>

Thx,

No naturalizm to coś zgodnego naturą :)

Opublikowano
To powiedz jak zrobić taki edytor, jak tak pomysłem błysnąłeś...

1. Stwórz listę, w której będziesz przechowywał indeksy załadowanych grafik

2. Stwórz strukturę danych, w której będziesz przechowywał dane nt. kości (czyli ID obiektu-kości, ID parenta kości) oraz zapisz w każym obiekcie-kości dane nt. jej graficznej reprezentacji (np. sprite kości, długość kości, kierunek, w którym kość jest skierowana)

3. Stwórz zestaw funkcji, które pozwolą ci na edycję danych nt. kości w trybie graficznym (przeciąganie kości, zmiana jej rozmiaru, dodawanie/usuwanie kości)

4. Stwórz key editor, czyli obiekt, który pozwoli ci na zapisywanie i edycję informacji nt. animacji kości (m. in. ilość klatek animacji, zapis matematyczny każdej kości w każdej klatce, typy interpolacji dla każdej kości)

5. Stwórz możliwość zapisania animacji w takim formacie, aby mogła z niej korzystać twoja gra w czasie rzeczywistym

 

I tyle, jeśli chodzi o najważniejsze elementy : )

Interpolacja tez działa w draw_sprite ?

draw_sprite przyjmuje za argumenty pozycje X i Y, to, w jaki sposób modyfikujesz te pozycje zależy tylko od ciebie. Czyli, interpolacja działa.

Opublikowano

Odpowiadając na twoje pierwsze pytanie: Dodawaj różnicę między kątem postaci a kątem ręki po czym przemnóż przez jakąś wartość. Problem leży w wyliczeniu tej różnicy - trzeba usunąć przeskok między kątem 360 do 0.

 

Wygrzebałem tą funkcję z moich code snippets-ów. Sęk w tym że jest w Javie - musisz przepisać te modulo (procenty) na jakieś gml-owe odpowiedniki (a o takich nie pamiętam, chyba "mod"?).

GML
public static float angleDifference(float angle0, float angle1) {

return ((((angle0 - angle1) % 360) + 540) % 360) - 180;

}

 

A to co opisałem na początku, wyglądało by mniej więcej tak.

GML
katReki += angleDifference(katPostaci, katReki) * 0.25;
Opublikowano

GMS ma tą funkcję

This function will return the smallest angle difference between two angles as a value between -180 and 180 degrees (where a positive angle is anti-clockwise and a negative angle clockwise).

GML
angle_difference(ang1, ang2);

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ę...