C++ SFML

Event souris

Le problème exposé dans ce sujet a été résolu.

Salut tout le monde,

Comment on peut associer le clique d’une souris à une option d’un menu ?

Je m’explique, j’ai créer un menu en SFML et j’aimerais que lorsque j’appuie sur une option de mon menu que ça m’apporte sur mon option sélectionné. J’ai tenter de le faire avec des switch case, mais je n’y ai pas arrivé. Que me conseillerez vous ?

+0 -0

Montre nous ce que tu as fais pour l’instant, on pourra certainement t’en dire plus.

+0 -0

Bon…

Tu gères ça à la main à partir de la position de l’option de ton menu, des coordonnées du clics et des évènements.
Réfères toi au tutoriel SFML pour apprendre à gérer les évènements.
Je te conseil d’utiliser une classe pour ton menu, ça serra plus facile à maintenir.

Voilà maintenant tu sais, ça ne change rien “sachant que tu as un tableau de 6”. Si la réponse ne te satisfait pas, aide nous à t’aider.

+0 -0

Oui, j’ai une classe pour le menu, j’ai déjà vérifié le tutoriel de SFML. Mais je n’ai toujours pas arrivé à le faire fonctionner. Mon problème est de faire associer le clique a l’option comme je mentionne plus haut. Par exemple si je clique sur option cela m’affiche la page option.

+0 -0

On va essayé de manière plus pédagogique.

Tu sais donc récupérer un évènement comme indiqué dans le cour de la SFML. Donc tu sais récupérer les coordonnées d’un clic ? Tu sais afficher l’option de ton menu, donc tu connais ses coordonnées ?

Pour pouvoir détecter un clic sur le menu, et bien il faut détecter que le clic est fait dans les bonnes coordonnées.

Ensuite comment afficher la page option ? Et bien il doit y avoir un état dans ton programme qui est modifié. Une variable pas exemple est_dans_option, et quand cette variable est défini, alors tu n’affiches que la page d’option. Le plus propre pour gérer l’état de ton programme, le plus propre généralement est un système de transition d’états.

+0 -0

Dans ta boucle d’événement :

if (event.type == sf::Event::MouseButtonPressed)
{
    if (event.mouseButton.button == sf::Mouse::Left)
    {
        std::cout << "the left button was pressed" << std::endl;
        std::cout << "mouse x: " << event.mouseButton.x << std::endl;
        std::cout << "mouse y: " << event.mouseButton.y << std::endl;
    }
}

Le tutoriel

+0 -0

Le tutoriel/le code ne montre pas comment faire apparaitre une nouvelle fenêtre

Dans le même chapitre: https://www.sfml-dev.org/tutorials/2.5/window-window.php

le tutoriel ne montre pas si je clic sur tel endroit fait tel chose

C’est exactement ce que le code montré par @d3m0t3p fait non ?

À la place de :

        std::cout << "the left button was pressed" << std::endl;
        std::cout << "mouse x: " << event.mouseButton.x << std::endl;
        std::cout << "mouse y: " << event.mouseButton.y << std::endl;

Tu vérifies que les coordonnées sont bonnes (là, il n’y a pas de vérification de coordonnées, mais c’est pas bien compliqué à faire avec des if). Et ça fait quelques choses, là ça affiche les coordonnées.

+0 -0

Voici le code qui permet de cliquer sur un des mes rectangle. Donc maintenant si je veut sélectionner la première option qui est jouer je doit faire le code que vous avez mentionné à la fin de ma boucle ? Mais je ne comprends pas comment il va faire pour faire le lien et savoir quel option du menu qu’il doit prendre. Puisqu’il a plusieurs option(Rect). Je ne comprends pas comment vérifier les coordonner.

    for (int i = 0; i < 3; i++)
    {
        if (_main-Menu[i].getGlobalBounds().contains(event.mouseButton.x, event.mouseButton.y)) {
            _main-Menu.setFillColor(Color::Black);
        }
        

    }
+0 -0

comme autre solution possible aussi(je ne sais pas si c’est la plus adapté),la SFML propose la classe sf::Mouse,qui a une fonction qui renvoie la position de la souris Si t’est option sont des rectangles la SFML arrive a gérer les boites englobantes.(tout les détails sont dans la doc du site)

Hello, SFML supports 5 mouse buttons: left, right, middle (wheel), extra #1 and extra #2 (side buttons). The member associated with these events is event. mouseButton , it contains the code of the pressed/released button, as well as the current position of the mouse cursor.

Thanks Daniel Charles

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte