Yeap, me again, lol. The thing is, I'm trying to give my ship an acceleration as if it were moving in space (zero gravity), if a press the Up arrow key, the ship increases its acceleration, change its direction (to the mouse vector), and so forth. There's the code I already have:
sf::Vector2f Nave::getDirection(sf::Vector2f mousePOS, sf::Vector2f playerPOS, float acceleration, sf::Time& delta)
{
sf::Vector2f direction = mousePOS - playerPOS;
direction = direction / sqrt(direction .x * direction .x + direction .y * direction .y) * aceleration;
return direcion;
}
void Nave::update(sf::Time& delta, sf::Vector2f mousePOS)
{
...
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
acceleration += 0.1f;
shipDir = getDirection( mousePOS, shipSprite.getPosition(), aceleration, delta );
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
{
acceleration -= 0.1f;
}
if( acceleration > 5.0f )
acceleration = 5.0f;
else if( acceleration < 0.0f )
acceleration = 0.0f;
shipSprite.move( shipDir.x, shipDir.y );
shipSprite.setAngle(angle);
...
}
float Nave::Angle( sf::Vector2f playerPOS, sf::Vector2f mousePOS )
{
float angle = atan2(mousePOS.y - playerPOS.y, mousePOS.x - playerPOS.x );
angle = angle * (180/PI);
if(angle < 0)
{
angle = 360 - (-angle);
}
return angle;
}
Of course there's an obvious problem, first, the deceleration, but most important, when I press the Up arrow again, the new vector direction totally f**ks the last direction, there's a video showing the problem:
Since I didn't find solution just looking at google (my poor English makes it harder, I think there aren't too much good gaming forums on Spanish), I'm looking for some help (duh).
Edit1:
there's a really explicit example of what i'm looking for: