2017-01-07 16 views
0

Я делаю шутер, где игрок может стрелять в мыши, поэтому я получил оружие, указывающее на мышь, но я не могу понять, как правильно перевернуть изображение, когда оно повернуто налево. Я имею в виду, я перевернул изображение, но оно не выровнено правильно. Я не совсем уверен, как это объяснить, вот мой код.Как перенести изображение и одновременно направить пушку на мышь? (SFML)

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 иш пикселей выше. Я не могу просто изменить положение при повороте, так что мне делать? Извините за звучание немного загадочным, это немного сложно объяснить.

+0

Есть ли какая-либо конкретная причина, по которой вы используете 'sf :: Sprite :: getGlobalBounds()'? – Mario

ответ

0
  • Прежде всего, вы должны установить источник своего спрайта так, чтобы вы вращали пистолет (как правило, ручку или точку крепления). Для этого используйте sf::Sprite::setOrigin(). Пропущенные координаты относятся к верхнему левому углу спрайта.

  • Чтобы получить или установить положение спрайта в мире (где ваше происхождение), вы можете использовать sf::Sprite::getPosition() и sf::Sprite::setPosition().

  • Ваше вращение может оставаться таким, каким оно есть. Он будет вращаться вокруг вашего набора.

  • Чтобы отразить Ваш спрайт, просто масштаб (sf::Sprite::setScale()) его с помощью отрицательного фактора: sprite.setScale(-1, 1); Отрицательный коэффициент будет отражать/переворачивать изображение на множестве происхождения, не заставляя вас обновить координаты текстуры.