Mam cos takiego:
void Player::accelerate(sf::Vector2f mysz, String key, float t) //to to czas klatki 0.01
{
Vector2f norm = mysz - spaceship.getPosition();//Counting the vector between the mouse and sprite
float rot = atan2(norm.y,norm.x);// counting the rotation (angle)
predkosc_katowa_poczatkowa=rot/t;
predkosc_katowa_koncowa=predkosc_katowa_poczatkowa+przyspieszenie_lub_opoznienie_kątowe*t; //rad/s
float r = static_cast<float>(sqrt((norm.x - spaceship.getPosition().x)*(norm.x - spaceship.getPosition().x) + (norm.y - spaceship.getPosition().y)*(norm.y - spaceship.getPosition().y))); // promiec od myszki do statku
v = predkosc_katowa_koncowa*r;
if(key=="A") // ruch jednostajnie przyspieszony do lewej
{
float xN = static_cast<float>(r*cos(predkosc_katowa_koncowa*t));
float yN = static_cast<float>(r*sin(predkosc_katowa_koncowa*t));
vx -= xN;
vy += yN ;
spaceship.move(vx,vy);
}
else if(key=="W") // tu normalnie do przodu
{
float ankle= rot * 180.f/M_PI;//conversion to degrees
ankle += 90; // adding to work normally
float xN = static_cast<float>(5 * sin(( ankle * M_PI ) / 180.0 ));
float yN = static_cast<float>(5 * cos(( ankle * M_PI ) / 180.0 ));
vx += xN * 0.02f;
vy -= yN * 0.02f;
spaceship.move(vx,vy);
}
Nastepnie w Player.update mam
Vector2f norm = mysz - spaceship.getPosition();//Counting the vector between the mouse and sprite
float rot = atan2(norm.y,norm.x);// counting the rotation
rot = rot * 180.f/M_PI;//conversion to degrees
rot += 90; // adding to work normally
spaceship.setRotation(rot);
spaceship.move(vx,vy);
//vx = vx - vx * 0.002f*10;//slowing down
//vy = vy - vy * 0.002f*10;
Niestety nie dziala, po nacisnieciu A wyrzuca mi statek od razu prawie poza ekranem.
Nie wiem tez, jak pogodzic zwalnianie do przodu i do boku, bo do przodu to normalnie zmniejszam szybkosc, ale w lewo nie mozna chyba tak, bo te mnozenie
0.002f*10
spowoduje, juz nie bedzie ruchu po okregu.