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)));
所以我必须在向下移动时移动一个围绕屏幕中心(这是对象在 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)));