[SFML] Ustawianie prędkości sprita
Ostatnio zmodyfikowano 2012-08-22 21:58
RazzorFlame Temat założony przez niniejszego użytkownika |
» 2012-08-22 21:33:52 akwes coś tam rozumiem z trygonometrii. Jak napisałem u góry już troche kumam z tego ale NIE DZIAŁA kiedy wyliczam kąt funkcją atan2(). Albo to ja nie umiem jej wykorzystać albo coś jest źle. Tu macie kod jaki jest w funkcji SetDir (wykorzystuje ją w konstruktorze): v_x = 3 * cos(( M_PI *( dir * 6 ) ) / 180 ); v_y = 3 * sin(( M_PI *( dir * 6 ) ) / 180 ); spr.SetCenter( w / 2, h / 2 ); spr.SetRotation( dir / 6 ); x = x + w / 2; y = y + h / 2;
Teraz może być coś źle bo wcześniej (przed postem DejaVu-iego o tym żeby nie używać tablic) miałem tak: v_x = 3 * cos_a[(( dir - 90 ) / 6 ) ]; v_y = 3 * sin_a[(( dir - 90 ) / 6 ) ]; spr.SetCenter( w / 2, h / 2 ); spr.SetRotation( dir / 6 ); x = x + w / 2; y = y + h / 2;
|
|
Mrovqa |
» 2012-08-22 21:36:22 Jeśli chodzi o ruch obiektu po linii (nachylonej pod jakimś kątem) to wystarczą ci tylko cos oraz sin, a one są banalne. Ja też trygonometrii nie miałem (jeszcze :P), ale jakoś to pojąłem ;) Zasada sin/cos jest prosta: patrz pierwszy obraz. To "dziwne O" to argument funkcji. Od początku układu współrzędnych prowadzisz półprostą nachyloną o kąt "dziwnego O" i zaznaczasz dowolny punkt na tej półprostej: x,y - współrzędne punktu; r - odległość punktu od początku układu współrzędnych. W wykorzystaniu w grach to działa na zasadzie prostych proporcji. Tyle Ci wystarczy ;) Rozumiesz? //edit: lol, 2 posty mnie poprzedziły, trochę mi zajęło napisanie tego :P |
|
DejaVu |
» 2012-08-22 21:37:52 |
|
akwes |
» 2012-08-22 21:40:14 |
|
RazzorFlame Temat założony przez niniejszego użytkownika |
» 2012-08-22 21:58:25 Dobra dobra juz po części działą lecz pocisk leci dokładnie w inną strone. Nawet zrobiłem "-(atan(...))" xd Najlepsze jest to że dobrze leci tylko jesli myszka jest u góry albo na dole. Mowiac w inna strone chodzi mi o to że kiedy myszka jest na dole to pocisk leci w kierunku dolnej krawędzi, tyle ze w dokładnie inną strone :D Okej już jakoś zadziałało. Nie wiem dlaczego ale działa jak od kąta odjęłem 135 stopni EDIT: Rozwiązanie jest takie: v_x = cos((( dir * M_PI ) / 180 ) - 135 ); v_y = sin((( dir * M_PI ) / 180 ) - 135 );
|
|
1 2 « 3 » |