Forum de la communauté SFML

Aide => Général => Discussion démarrée par: XylaTV le Juillet 09, 2022, 05:53:38 pm

Titre: Création d'événement pour des boutons
Posté par: XylaTV le Juillet 09, 2022, 05:53:38 pm
Bonjour, j'utilise la SFML pour créer des boutons. Avec un seul bouton mon code fonctionne bien mais avec deux j'ai un problème : mon curseur bug et je crois que deux actions se mélangent entre elles :/ Dans mon code je veux que quand l'utilisateur survole un bouton le curseur change mais avec mon code le curseur ne fait que de changer quand je bouge la souris.

Voici mon code :
case sf::Event::MouseMoved:
                {
                    sf::Vector2i mousePos = sf::Mouse::getPosition(window);
                    sf::Vector2f mousePosF(static_cast<float>(mousePos.x), static_cast<float>(mousePos.y));

                    if (companyButtonSprite.getGlobalBounds().contains(mousePosF)) // Bouton 1
                    {
                        companyButtonSprite.setColor(sf::Color(255, 255, 255, 255));
                        window.setMouseCursor(handCursor);
                    }
                    else
                    {
                        companyButtonSprite.setColor(sf::Color(255, 255, 255, 215));
                        window.setMouseCursor(arrowCursor);
                    }

                    if (soundButtonSprite.getGlobalBounds().contains(mousePosF)) // Bouton 2
                    {
                        window.setMouseCursor(handCursor);
                    }
                    else
                    {
                        window.setMouseCursor(arrowCursor);
                    }
                }
                break;

Merci de votre aide ;)
Titre: Re: Création d'événement pour des boutons
Posté par: FatihLD le Août 21, 2022, 01:19:24 pm
Salut,

Le soucis avec ton code est que lorsqu'une des deux conditions échoue, ton curseur est réinitialisé. Pour éviter ça tu peux utiliser un "if/else if". Si t'as un grand nombre de boutons par la suite tu peux généraliser le tout en les mettant dans un conteneur et en itérant dessus.

D'ailleurs, tu peux convertir ton Vector2i en Vector2f en utilisant le constructeur de la classe directement :
sf::Vector2f mousePosF(mousePos);
Titre: Re: Création d'événement pour des boutons
Posté par: squidblack le Mars 06, 2024, 07:59:13 am
Salut,

Le soucis avec ton code est que lorsqu'une des deux conditions échoue, ton curseur est réinitialisé. Pour éviter ça tu peux utiliser un "if/else if". Si t'as un grand nombre de boutons par la suite tu peux généraliser le tout en les mettant dans un conteneur et en itérant dessus.

D'ailleurs, tu peux convertir ton Vector2i en Vector2f en utilisant le constructeur de la classe directement :
sf::Vector2f mousePosF(mousePos);
J'ai essayé et ça marche.