Есть ли способ повернуть sf :: FloatRect - PullRequest
0 голосов
/ 03 августа 2020

Я делаю в своем проекте систему обнаружения столкновений, и мне нужно обнаруживать столкновения на повернутой текстуре.

Для обнаружения столкновений вокруг основной текстуры персонажа ( для обнаружения столкновения влево, вправо, вверх и вниз), а sf::FloatRect создается с использованием положения текстуры и ее размеров. Если один из 4 sf::FloatRect объектов вокруг основной текстуры пересекается с другим sf::FloatRect, обнаруживается столкновение.

Проблема возникает, когда текстура, на которой я хочу обнаружить столкновение, поворачивается. sf::FloatRect не вращается.

Есть ли способ его повернуть? Или есть альтернатива в этой ситуации? Я просмотрел онлайн-документацию по SFML и не нашел способа повернуть его.

    RectangleShape collisionArea(Vector2f(pos[2], pos[3]));
    collisionArea.setPosition(pos[0], pos[1]);
    collisionArea.setRotation(rotation);

    FloatRect box = collisionArea.getGlobalBounds();


        FloatRect areaLeft(position.x - movementSpeed, position.y, movementSpeed, textureDimentions.y);
        FloatRect areaRight(position.x + textureDimentions.x, position.y, movementSpeed, textureDimentions.y);
        FloatRect areaUp(position.x, position.y - movementSpeed, textureDimentions.x, movementSpeed);
        FloatRect areaDown(position.x, position.y + textureDimentions.y, textureDimentions.x, movementSpeed);

        if(box.intersects(areaLeft))
        {
            collidingMap[0] = true;
        }

        if(box.intersects(areaRight))
        {
            collidingMap[1] = true;
        }


        if(box.intersects(areaUp))
        {
            collidingMap[2] = true;
        }


        if(box.intersects(areaDown))
        {
            collidingMap[3] = true;
        }

1 Ответ

3 голосов
/ 03 августа 2020

sf::FloatRect в SFML представляет собой AABB (AABB означает с выравниванием по оси ограничивающая рамка). Так что нет, он не может вращаться. Что вам нужно, так это OBB ( Ориентированный Bounding Box) обнаружение столкновений. Вам нужно будет либо

  • Написать свой собственный код (сложно)

или

  • Найти библиотеку, которая выполняет работа для вас!

Я нашел это после поиска на форуме SFML. Могут быть решения получше, но это первое, что я нашел.

...