Welcome, Guest. Please login or register. Did you miss your activation email?

Author Topic: pb template  (Read 8123 times)

0 Members and 1 Guest are viewing this topic.

Kakarosto

  • Newbie
  • *
  • Posts: 2
    • View Profile
pb template
« on: July 15, 2022, 09:57:43 pm »
Bonjour, j'utilise une fonction template qui permet à l'utilisateur d'intéragir avec des sf::RectangleShape ou sf::Sprite avec la souris :

template<typename TShape>
bool MouseInteract(const sf::Event& _event, const sf::RenderWindow& _window, const TShape& _tShape)
{
        bool bReturn = false;

        int mx = sf::Mouse::getPosition(_window).x;
        int my = sf::Mouse::getPosition(_window).y;

        sf::Vector2u sizeShape;

        if (std::is_same<TShape, sf::RectangleShape>::_tShape)
        {
                sizeShape = _tShape.getSize();
        }
        else if (std::is_same<TShape, sf::Sprite>::_tShape)
        {
                sizeShape = _tShape.getTexture()->getSize();
        }

        if (mx > _tShape.getPosition().x && mx < _tShape.getPosition().x + sizeShape.x && // en X
                my > _tShape.getPosition().y && my < _tShape.getPosition().y + sizeShape.y)
        {
                if (_event.type == sf::Event::MouseButtonPressed)
                {
                        if (_event.key.code == sf::Mouse::Left)
                        {
                                bReturn = true;
                        }
                }
        }

        return bReturn;
}

mais il y a un pb à la compilation, donc comment faire ?

G.

  • Hero Member
  • *****
  • Posts: 1599
    • View Profile
Re: pb template
« Reply #1 on: July 16, 2022, 12:59:15 pm »
WTF pourquoi le texte d'erreur est sous forme d'image ?  ???

La première erreur est assez parlante, getSize n'existe pas pour sf::Sprite, comme on peut le constater dans la doc donc à _tShape.getSize() le compilateur ne sait pas quoi faire.
Tu peux éventuellement utiliser la fonction getGlobalBounds pour récup les hauteur et largeur de ton sprite. (s'il est pas rotaté)

Ensuite on voit que l'erreur est relative à ton ::_TShape dans le is_same, si on sait pas trop on mate la doc du is_same et on voit que c'est ::value qu'il faut utiliser (ou direct is_same_v si c'est possible)

Pour finir, juste une suggestion pas forcément correcte suivant ce que tu veux faire, si tu veux juste vérifier si le clic de souris est sur un rectangle ou un sprite tu peux récupérer le rectangle englobant de ton sprite ou de ton rectangle avec getGlobalBounds() puis vérifier avec contains si ce rectangle contient ton curseur de souris

Kakarosto

  • Newbie
  • *
  • Posts: 2
    • View Profile
Re: pb template
« Reply #2 on: July 16, 2022, 02:09:53 pm »
désolé pour l'erreur en image et merci pour l'aide, ca fonctionne :

template<typename TShape>
bool MouseInteract(const sf::Event& _event, const sf::RenderWindow& _window, const TShape& _tShape)
{
        bool bReturn = false;

        sf::Vector2f posMouse = sf::Vector2f(sf::Mouse::getPosition(_window));

        if (_tShape.getGlobalBounds().contains(posMouse))
        {
                if (_event.type == sf::Event::MouseButtonPressed)
                {
                        if (_event.key.code == sf::Mouse::Left)
                        {
                                bReturn = true;
                        }
                }
        }

        return bReturn;
}

 

anything