Задать вопрос
@Reaper_sds

Как сделать поворот руки спрайта героя?

Возможно ли сделать поворот руки спрайта в сторону курсора в sfml? Если да то как?
  • Вопрос задан
  • 81 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
@LanskoyGames
У модераторов первое место, но только с конца...
#include <SFML/Graphics.hpp>
#include <cmath>

int main() {
    sf::RenderWindow window(sf::VideoMode(800, 600), "Hand Mouse");

    sf::Texture handTexture;
    if (!handTexture.loadFromFile("hand.png")) {
        return -1;
    }
    sf::Sprite handSprite(handTexture);

    // Установка центра вращения спрайта в его середину
    handSprite.setOrigin(handTexture.getSize().x / 2, handTexture.getSize().y / 2);

    // Установка начальной позиции спрайта руки
    handSprite.setPosition(400, 300); // Например, в центр экрана

    while (window.isOpen()) {
        sf::Event event;
        while (window.pollEvent(event)) {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        sf::Vector2i mPos = sf::Mouse::getPosition(window);
        
        // Преобразование векторных координат мыши в координаты окна
        sf::Vector2f mPosF(static_cast<float>(mPos.x), static_cast<float>(mPos.y));

        // Вычисление разницы между позицией руки и курсора
        sf::Vector2f direction = mPosF - handSprite.getPosition();
        
        // Вычисление угла поворота в радианах
        float angle = std::atan2(direction.y, direction.x);

        // Конвертация угла из радианов в градусы
        float angleDegrees = angle * 180.f / 3.14159f;

        handSprite.setRotation(angleDegrees);

        window.clear();
        window.draw(handSprite);
        window.display();
    }

    return 0;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы