Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - apus

Strony: [1]
1
Matematyka i fizyka / Animacja postaci 2D
« dnia: Lipiec 30, 2009, 02:29:06 »
Jako że to mój pierwszy post- witam wszystkich :) Mam pewien problem, zabrałem się za pisanie prostej gry w 2D, grafikę oparłem na SDLu, zdefiniowałem sobie klasę bryły,  z której dziedziczą rózne szczególne: wielokąty, okręgi, prostokaty itd... Napisałem klasę postaci, chciałem orginalnie, więc zrobiłem tak że każdej stopie, ręce, głowie i koprusowi przyporządkowałem jakiś wielokoąt i zabrałem się za animację tego tworu :) Postać ma wektory, patrzy prosto(st) i wektor w prawo(rg). Napisałem funkcję która animuje kroki, lewa noga do przodu prawa w tył i później na odwrót.

(funkcja jest w wersji roboczej jeszcze)
void Cplayer::player_move(int time, double stala, double steplength,int dir){
kat+=time*omega*0.001; //omega jest to predkosc katowa stóp :D
lfoot->move(st.retcrd(0)*steplength*(sin(kat))-ax,st.retcrd(1)*steplength*(sin(kat))-ay);
rfoot->move(-st.retcrd(0)*steplength*(sin(kat))+ax,-st.retcrd(1)*steplength*(sin(kat))+ay);
ax=st.retcrd(0)*steplength*(sin(kat)); //funkcja retcrd zwraca wspołrzedna wektora st, retcrd(0) zwraca x, a retcrd(1) zwraca y.
ay=st.retcrd(1)*steplength*(sin(kat));
//dalej następuje przesuwanie wszystkich figur i wektorów o tyle ile trzeba :P
}
funkcja lfoot->move(double dx, double dy) po prostu przesuwa, dodaje do obecnych wspolrzednych lfoot, dx i dy. 

No i pojawia mi sie problem, bo o ile jeżeli wektor prosto jest równoległy do OX to wszystko działa jak powinno, lewa, prawa, lewa, prawa. Ale gdy poruszam myszką (wektor st, jest uzależniony od myszki) i ustawiam st, tak żeby był równoległy do OY, wtedy zmienia się to dosyć dziwnie, bo nogi poruszają się równolegle do OX, i nie jak poprzednio w dwóch liniach (jedna obok drugiej) co dziwne poruszają się w jednej linii.(czyli dla obu stóp Y jest takie samo, no może oscyluje wokół niewielkich wartości, a zmienia się X).

Z góry dzięki za pomoc, albo chociaż wskazówki jak to ugryźć z może bardziej przewidywalnej strony?;)

Strony: [1]