所以我必须在向下移动时移动围绕屏幕中心(这是对象在X中的原始位置)旋转的精灵。由于子画面在屏幕周围无处不在,我还没有找到使其工作的方法。
move(0, speed);
angle = getRotation();
rotate(+1);
move(origPosX + cosf(angle) * speed, origPosY + sinf(angle) * speed);
答案 0 :(得分:0)
我只能假设您每帧都在运行问题中的代码,在这种情况下,您应该使用setPosition
,而不是move
,否则它将为不断旋转。
您还为每帧的旋转增加了1,除非您锁定帧速率,否则这将是不一致的,因此我建议乘以自上一帧以来的时间(又称为“增量时间”)。
此外,SFML中的旋转以度为单位,但是cosf
以弧度为参数,因此您需要对其进行转换。
您想要执行以下操作:
position += sf::Vector2f(0.f, speed);
rotate(1.f * deltaTime);
setPosition(position.y + cosf(toRadians(angle)), position.y + sinf(toRadians(angle)));