Ruch po linii z punktu do punktu...
Ostatnio zmodyfikowano 2014-12-31 18:59
czosnek17 Temat założony przez niniejszego użytkownika |
Ruch po linii z punktu do punktu... » 2014-12-31 13:47:04 Robię wszystko według tego http://cpp0x.pl/forum/temat/?id=15985 i nie działa. Obiekt zawsze przemieszcza się w prawo i w dół między 270 - 360 stopni. circle.setPosition( 200, 200 ); sf::Vector2i target( 150, 300 ); angle = atan2( target.x, target.y ); while() { float x = cos( angle ); float y = sin( angle ); circle.move( x, y ); }
|
|
NopeDotAvi |
» 2014-12-31 13:50:50 W google wpisz szymonsiarkiewicz gra sfml, lekcja 3.2 |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2014-12-31 14:10:47 Tam jest tak float vx = sin(...); float vy = - cos(...);
dziwne, bo to na odwrót niż w tamtym temacie. Zmieniło się tyle, że obiekt zawsze idzie w górę i w prawo. Nie ogarniam tego. |
|
RazzorFlame |
» 2014-12-31 14:29:57 bo sinus i cosinus przyjmują wartości od -1 do 1. Poza tym źle używasz atan2() Powinieneś podać w argumencie różnicę tych dwóch współrzędnych i najpierw podać współrzędne y a potem x: circle.setPosition( 200, 200 ); sf::Vector2i target( 150, 300 ); angle = atan2( target.y - circle.getPosition().y, target.x - circle.getPosition().x ) * 180 / M_PI; Teraz jak już będziesz miał kąt to musisz sobie go przekształcić bo możesz otrzymać wartość ujemną: if( angle < 0 ) { angle = 360 + angle; }
Teraz znów zmieniasz jednostkę z stopni na radiany: angle = angle * M_PI /( double )( 180 ); I następnie: f.x = sin( angle ); f.y = - cos( angle );
O ile się nie myle to właśnie zawsze podawałem wartość przeciwną od cosinusa. Jezeli ten układ sinusów i cosinusów nie będzie działał to popróbuj dawając ujemny sinus albo coś w tym stylu. |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2014-12-31 18:59:19 Już jest ok, dzięki. float y = sin( angle ); float x = cos( angle );
|
|
« 1 » |