Ciało funkcji setRotation (Bo rotate, to setRotation(getRotation() + angle) możesz zobaczyć tutaj:
https://github.com/SFML/SFML/blob/master/src/SFML/Graphics/Transformable.cpp#L72
Z tego co zrozumiałem, to chciałbyś obracać sprita wokół jego środka, a pozycjonować względem rogu.
Spróbuj zrobić to tak, jak zrobiłem to w tym kodzie.
#include <iostream>
#include <SFML/Graphics.hpp>
class Pawn : public sf::Drawable, public sf::Transformable {
sf::RectangleShape shape;
virtual void draw(sf::RenderTarget &target, sf::RenderStates states) const override {
states.transform *= getTransform();
target.draw(shape, states);
}
public:
Pawn() : shape({ 200,200 })
{
shape.setPosition(100, 100);
shape.setOrigin(100, 100);
}
void rotate(const float &angle) {
setRotation(shape.getRotation() + angle);
}
void setRotation(const float &angle) {
shape.setRotation(angle);
}
float getRotation() {
return shape.getRotation();
}
};
int main()
{
sf::RenderWindow window(sf::VideoMode(1280, 720), "Title");
Pawn pawn;
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed)
window.close();
}
pawn.setPosition((sf::Vector2f)sf::Mouse::getPosition(window));
pawn.rotate(0.1);
window.clear(sf::Color(37,37,48));
window.draw(pawn);
window.display();
}
return 0;
}
Tutaj masz parę screenów z działania aplikacji:
http://imgur.com/a/ae5Yw
Za każdym przejściem pętli, nadaję mu pozycję myszki oraz obracam o 0.1f