如何翻转图像并同时用枪指向鼠标? (SFML)

时间:2017-01-07 14:42:46

标签: c++ rotation sfml image-rotation

我制作一个玩家可以用鼠标射击的射击游戏,所以我让枪指向鼠标,但我无法弄清楚如何正确地翻转图像&#39向左转。我的意思是,我确实翻了图像,但它没有对齐。我不确定如何解释它,这是我的代码。

void PortalGun::update(Vector2i mPos) {

    float pi = 3.14159265359;

    float rotation = atan2(sprite.getGlobalBounds().top - mPos.y,sprite.getGlobalBounds().left - mPos.x) * 180 / pi;

    int x = player->sprite.getGlobalBounds().left + 16;
    int y = player->sprite.getGlobalBounds().top;

    if (rotation > -90 && rotation < 90) {
        player->dir = -1;
        sprite.setTextureRect(IntRect(0, 32, 64, -32));
    } else {
        player->dir = 1;
        sprite.setTextureRect(IntRect(0, 0, 64, 32));
    }


    sprite.setPosition(x, y + 15);
    sprite.setRotation(rotation + 170);

}

当鼠标位于枪的左侧时,它会翻转图像,但会继续向上旋转,因此鼠标高出20个像素。旋转时我无法改变位置,所以我该怎么办?对不起听起来有点神秘,有点难以解释。

1 个答案:

答案 0 :(得分:0)

  • 首先,您应该将精灵的原点设置为您想要旋转喷枪的位置(通常是手柄或安装点)。为此,请使用sf::Sprite::setOrigin()。传递的坐标相对于精灵的左上角。

  • 要获取或设置精灵在世界中的位置(原点所在位置),您可以使用sf::Sprite::getPosition()sf::Sprite::setPosition()

  • 您的轮换可以保持不变。它将围绕您的设定原点旋转。

  • 要镜像您的精灵,只需使用负因子缩放(sf::Sprite::setScale()):sprite.setScale(-1, 1);负面因素将镜像/翻转设定原点的图像,而不会强制您更新纹理坐标。