Я могу только предположить, что вы запускаете код в своем вопросе каждый кадр, и в этом случае вы должны использовать setPosition
, а не move
, в противном случае он будет постоянно добавлять смещение позиции для вращения.
Вы также добавляете 1 к повороту каждого кадра, что, если вы не заблокируете частоту кадров, будет непоследовательным, поэтому я рекомендую умножить на время с последнего кадра (AKA «delta time»).
Кроме того, вращение в SFML выполняется в градусах, но cosf
принимает аргументы в радианах, поэтому вам необходимо преобразовать это.
Вы хотите сделать что-то вроде этого:
position += sf::Vector2f(0.f, speed);
rotate(1.f * deltaTime);
setPosition(position.y + cosf(toRadians(angle)), position.y + sinf(toRadians(angle)));