Advertisement

Rotating a sprite toward mouse [SFML]

Started by July 27, 2015 06:39 AM
1 comment, last by TheCanadianVendingMachine 9 years, 5 months ago

In my game, I want the sprite to be able to rotate towards the mouse. However, the conventional method of atan2(dY, dX) gives bad results. I want to find out what I am doing wrong

CODE:

Calling the update cycle:


gameObj.player->update(deltaTime, sf::Mouse::getPosition(*app));

Player update code:


void player::update(float time, sf::Vector2i mousePos)
    {
        shipSprite.move(playerVelocity * time);

        const float PI = 3.14159265;

        float dX =  mousePos.x - shipSprite.getPosition().x;
        float dY = mousePos.y - shipSprite.getPosition().y;

        float rotation = atan2(dY, dX);
        rotation *= 180 / PI;

        shipSprite.setRotation(rotation);
    }

What happens:

http://gyazo.com/5d8bf3240d030987bb0b7814029d863b

Are mousePos and shipSprite.getPosition given in the same space? I.e. are both in screen space or are both in world space? The mouse position is driven by sf::Mouse::getPosition which results in window co-ordinates. On the other hand, a sprite position is usually given in world space which may differ dramatically from screen space. Now, because you compute the difference of the two positions, you need to make sure that both are in the same space.

Advertisement

Thanks Hae!

This topic is closed to new replies.

Advertisement