SFML Как вращаться вокруг центра экрана при движении вниз? - PullRequest
0 голосов
/ 08 октября 2018

Так что мне нужно перемещать спрайт, который вращается вокруг центра экрана (который является исходной позицией объекта в X) при движении вниз.Я еще не нашел способ заставить его работать, так как спрайт мерцает повсюду вокруг экрана.

move(0, speed);
angle = getRotation();
rotate(+1);
move(origPosX + cosf(angle) * speed, origPosY + sinf(angle) * speed);

1 Ответ

0 голосов
/ 09 октября 2018

Я могу только предположить, что вы запускаете код в своем вопросе каждый кадр, и в этом случае вы должны использовать 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)));
...