Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Poruszanie sprita w kierunku myszki

Ostatnio zmodyfikowano 2015-12-02 14:39
Autor Wiadomość
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.

C/C++
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;
P-141275
DejaVu
» 2015-12-02 12:56:03
Zrób sobie funkcję do obliczania kąta między dwoma punktami.
Frazy, które należy wpisać w wyszukiwarkę google:
http://cpp0x.pl/forum/temat/​?id=10282&p=2
P-141277
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

C/C++
speed = 2;
long double angle =( atan2( mouse.y - this->y, mouse.x - this->x ) );
//long double angle = (atan2(this->y - mouse.y, this->x - mouse.x));
angle = -( 180 * angle / 3.14159265 );
float a = speed * sin( angle );
float b = speed * cos( angle );
//this->sprite.move(sf::Vector2f(a, b));
//this->x = this->sprite.getPosition().x;
//this->y = this->sprite.getPosition().y;
this->x = this->x + a;
this->y = this->y + b;
P-141279
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:
C/C++
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 );
P-141281
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?
P-141282
Gibas11
» 2015-12-02 14:39:07
Nie, problem ten eliminuje podzielenie różnicy przez odległość.
P-141285
« 1 »
  Strona 1 z 1