代码之家  ›  专栏  ›  技术社区  ›  Scary Monsters

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

  •  -1
  • Scary Monsters  · 技术社区  · 6 年前

    move(0, speed);
    angle = getRotation();
    rotate(+1);
    move(origPosX + cosf(angle) * speed, origPosY + sinf(angle) * speed);
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Julxzs Danny Herbert    6 年前

    我只能假设你每一帧都在运行问题中的代码,在这种情况下,你应该使用 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)));