Skocz do zawartości

Naturalistyczny Ruch Rąk


Rekomendowane odpowiedzi

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 ?

Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

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? :>

Odnośnik do komentarza
Udostępnij na innych stronach

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ą :)

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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