SFML 如何在向下移动时围绕屏幕中心旋转?

SFML How to orbit around around the center of the screen while moving down?

所以我必须在向下移动时移动一个围绕屏幕中心(这是对象在 X 中的原始位置)旋转的精灵。我还没有找到让它工作的方法,因为精灵在屏幕上到处闪烁。

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

我只能假设你是 运行 你问题中每一帧的代码,在这种情况下,你应该使用 setPosition,而不是 move,否则它将是不断增加旋转的位置偏移

您还为每一帧的旋转添加 1,除非您锁定帧率,否则将会不一致,因此我建议乘以自上一帧以来的时间(又名 "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)));