Marcin1147 Opublikowano 30 Kwietnia 2010 Opublikowano 30 Kwietnia 2010 Potrzebuje poruszania się po danym kącie z daną szybkością. Kiedyś miałem taki fajny kod, ok. 4 linie ale działał perfekcyjnie. Z pamięci napisałem takie coś, ale nie działa tak jakbym chciał. Kod jest do C#, ale mi chodzi o sam algorytm. angle = direction * (180/Math.PI); dx = Math.Cos(angle) * speed; dy = Math.Sin(angle) * speed; x += (int)dx; y += (int)dy; Pomóżcie!
Konrad-GM Opublikowano 30 Kwietnia 2010 Opublikowano 30 Kwietnia 2010 float angle = direction * (180/Math.PI); x += (int)(Math.Cos(angle) * speed); y -= (int)(Math.Sin(angle) * speed); ??
Marcin1147 Opublikowano 30 Kwietnia 2010 Autor Opublikowano 30 Kwietnia 2010 Yyy, to jest mój kod tylko skrócony? Nic się nie zmieniło.
Konrad-GM Opublikowano 30 Kwietnia 2010 Opublikowano 30 Kwietnia 2010 Jakbym wiedział gdzie leży błąd... nie jesteśmy jasnowidzami :)
Marcin1147 Opublikowano 30 Kwietnia 2010 Autor Opublikowano 30 Kwietnia 2010 Chodzi mi o to, że ten kod nie działa jak powinien, zwyczajnie "świruje". Chciałem aby ktoś znający się trochę na matmie napisał algorytm działający jak GM'owe speed i direction bo mój kod (z pierwszego postu) zwyczajnie nie działa.
Administratorzy gnysek Opublikowano 30 Kwietnia 2010 Administratorzy Opublikowano 30 Kwietnia 2010 A jest uwzględniona prędkość gry (FPS) ? Bo jeżeli ten kod wykonuje się co cykl zegara, to dość szybko przekracza zakres INTa.
Dawidds Opublikowano 30 Kwietnia 2010 Opublikowano 30 Kwietnia 2010 Opisz jak "świruje", bo sam algorytm jest ok. A, nie powinno być przypadkiem pi/180?
Crackkk-GM Opublikowano 30 Kwietnia 2010 Opublikowano 30 Kwietnia 2010 A degtorad gdzie? sry, jest. (angle*pi) / 180 <_< float angle = (direction * Math.PI)/180; x += (int)(Math.Cos(angle) * speed); y -= (int)(Math.Sin(angle) * speed); Już powinno styknąć.
Marcin1147 Opublikowano 30 Kwietnia 2010 Autor Opublikowano 30 Kwietnia 2010 Nadal kupa. Gdy direction=0 wtedy grafika porusza się w prawo, gdy dam np. 45 to wtedy staje w miejscu :(
Crackkk-GM Opublikowano 30 Kwietnia 2010 Opublikowano 30 Kwietnia 2010 Musi być dobrze, ja mam na tej zasadzie w silniku i styka, oO. float angle = (direction * Math.PI)/180; x += (int)(Math.Cos(angle) * speed); y += (int)(Math.Sin(angle) * speed);
waxx Opublikowano 30 Kwietnia 2010 Opublikowano 30 Kwietnia 2010 Przechowuj pozycje we float przy obliczeniach anyway. Taki protip.
Rekomendowane odpowiedzi
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ę