Skocz do zawartości

Ręka podążająca za kursorem. Kości?


Rekomendowane odpowiedzi

Witam.

Od wczoraj męczę się z pewnym problemem (nie mów :V). Chciałbym zrobić rękę podążającą za kursorem. Jest ona podzielona na trzy części: ramię, ręka1 (do łokcia), ręka2 (od łokcia, wraz z dłonią).

Próbowałem to zrobić jointami i coś tam w miarę wychodziło, ale nie do końca (wszystko już usunąłem). Chciałem to zrobić tak:

Ramię - statyczne

Ręka1 - swobodna lewitacja, oddziaływuje na nią grawitacja

Ręka2 - podąża za kursorem

 

Umieszczam gify, które mogą nieco rozjaśnić mój tok myślenia (,bo niewielu ludzi potrafi go ogarnąć)

LEGENDA:

Ramię - czarne

Ręka1 - zielona

Ręka2 - niebieska

Połączenia jointów - pomarańczowa

 

giphy.gif

 

giphy.gif

 

giphy.gif

 

source.gif

 

PS:

Wiem, że programista powinien potrafić logicznie myśleć, ale u mnie trochę z tym ciężko :|

Próbowałem też trochę lengthdirami, ale wychodziło średnio.

Bawiłem się jointami pierwszy raz w życiu, więc mogę trochę nie ogarniać.

Odnośnik do komentarza
Udostępnij na innych stronach

IK to nie jest prosty temat, więc lepiej IMO, jeśli będzie trzymał się opcji z fizyką.

 

Ale jakby OP jednak chciał się zagłębić, podrzucam dokument o tym jak to liczyć: http://math.ucsd.edu/%7Esbuss/ResearchWeb/...ds/iksurvey.pdf

Odnośnik do komentarza
Udostępnij na innych stronach

Dość uproszczone, ale łatwo rozwinąć ;)

 

sprite0 - czarny kwardat origin center.

sprite1 - zielony prostokąt origin x-0 y-środek

sprite2 - niebieskii prostokąt origin x-0 y-środek

 

GML
var rot1, rot2, xx, yy;

 

draw_sprite(sprite0, 0, x, y);

 

rot1 = point_direction(x, y, mouse_x, mouse_y);

rot1 -= max((sprite_get_width(sprite1)+sprite_get_width(sprite2)) - point_distance(x, y, mouse_x, mouse_y), 0)

 

draw_sprite_ext(sprite1, 0, x, y, 1, 1, rot1, c_white, 1);

 

 

xx = x + lengthdir_x(sprite_get_width(sprite1), rot1);

yy = y + lengthdir_y(sprite_get_width(sprite1), rot1);

rot2 = point_direction(xx, yy, mouse_x, mouse_y);

 

draw_sprite_ext(sprite2, 0, xx, yy, 1, 1, rot2, c_white, 1);

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

ja jeszcze może podeślę swój przykład, chociaż to taka łopatologia i tak dalekie od ideału, że aż wstyd

https://gmclan.org/up7193_4_rami_.html

Odnośnik do komentarza
Udostępnij na innych stronach

Ooo, dziękuje za odpowiedzi. Nie miałem czasu, żeby tu wpaść, a widzę, że ruch spory w tym poście. Jak przysiądę na trochę dłużej do gm'a, to napisze, co mi się udało naskrobać.

 

Dziękuje jeszcze raz za odpowiedzi. Najbardziej spodobało mi się rozwiązanie ediegopl, co nie znaczy, że inne odpowiedzi się nie przydały. Dzięki jeszcze raz, miło znowu wrócić na to forum.

PS: Tak, rozwiązałem mój problem ;)

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