[SFML] Poruszanie sprita w kierunku myszki
Ostatnio zmodyfikowano 2015-12-02 14:39
jacek21 Temat założony przez niniejszego użytkownika |
[SFML] Poruszanie sprita w kierunku myszki » 2015-12-02 12:08:50 Cos chyba pokrecilem w kodzie, ale za nic w swiecie nie moge znalezc co. Chodzi o to, ze sprajt porusza sie strasznie nierowno, na przyklad jak leci na "polnocny wschod" to robi to strasznie szybko, na dol wolno itd, ogolnie predkosci dobiera sobie rozne, a chcialbym zeby chodzil w kierunku myszy zawsze z ta sama predkoscia. speed = 1, 3333; float a = float( speed *( - sin(((( 1 * 360 / 3.14159265 *( atan2( static_cast < float >( this->y - mouse.y ), static_cast < float >( this->x - mouse.x ) ) ) / 2 ) + 90 ) * 3.14159265 ) / 180 ) ) ); float b = float( speed *( cos(((( 1 * 360 / 3.14159265 *( atan2( static_cast < float >( this->y - mouse.y ), static_cast < float >( this->x - mouse.x ) ) ) / 2 ) + 90 ) * 3.14159265 ) / 180 ) ) ); this->sprite.move( sf::Vector2f( a, b ) ); this->x = this->sprite.getPosition().x; this->y = this->sprite.getPosition().y;
|
|
DejaVu |
» 2015-12-02 12:56:03 |
|
jacek21 Temat założony przez niniejszego użytkownika |
» 2015-12-02 14:17:42 Robie to na miliony sposobow, ale tego prawidlowego jeszcze nie znalazlem, teraz mam ciekawie, zanim ruszy to robi kolko :) Problemem (chyba) nie jest sam kat, bo obraca sie ladnie, tylko to ze nie umiem go ruszyc speed = 2; long double angle =( atan2( mouse.y - this->y, mouse.x - this->x ) );
angle = -( 180 * angle / 3.14159265 ); float a = speed * sin( angle ); float b = speed * cos( angle );
this->x = this->x + a; this->y = this->y + b;
|
|
Gibas11 |
» 2015-12-02 14:26:28 A chcesz to robić przez przesuwanie pod kątem? Najprostszą metodą jest chyba obliczyć różnicę między współrzędnymi 2 punktów, i podzielić to przez odległość między nimi - dostaniesz wtedy zmienną typu sf::Vector2f z małym ruchem a prędkość poruszania się regulować możesz przez pomnożenie tego przez np. 5.f. Tu masz skrawek kodu, matma na poziome gimnazjum, więc raczej wszystko zrozumiesz: sf::Vector2f roznica = pozycja - cel; float dystans = sqrt(( roznica.x * roznica.x ) +( roznica.y * roznica.y ) ); sf::Vector2f unitVector = roznica / dystans;
sprite.move( unitVector * 2.5f );
|
|
jacek21 Temat założony przez niniejszego użytkownika |
» 2015-12-02 14:28:37 Pytanie czy wtedy predkosc nie bedzie zalezna od odleglosci miedzy myszka a sprajtem? |
|
Gibas11 |
» 2015-12-02 14:39:07 Nie, problem ten eliminuje podzielenie różnicy przez odległość. |
|
« 1 » |