Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question event SDL 2 (C)

    26 novembre 2020 à 13:23:24

    Bonjour ! 

    J'ai une petite question ! Je me lance dans la création d'un petit jeu sur SDL 2, et je voulais créer une fonction qui gère le click sur une texture. En gros, que la fonction me retourne automatiquement 1 si le curseur de la souris est sur la texture, ou 0 s'il ne l'est pas. 

    Pour cela j'ai envoyé à ma fonction l'adresse du SDL_Rect contenant la position de la texture, et donc l'adresse de l'event (pour pouvoir récupérer les informations sur la position de la souris).

    Le prototype de ma fonction était donc le suivant : int cursor_texture (SDL_Rect* position, SDL_Event* event);

    Mais j'ai remarqué alors que la fonction ne marchait pas, et je vois en bas marqué lors de la compilation qu'il me faut un SDL_MouseMotionEvent. Et en effet, si au lieu de dire à ma fonction qu'elle attend un SDL_Event* mais plutôt un SDL_MouseMotionEvent*, la fonction marche miraculeusement !

    Donc mon nouveau prototype est le suivant : int cursor_texture (SDL_Rect* position, SDL_MouseMotionEvent* event);

    Ce qui implique donc de lui envoyer un &event.motion au lieu d'un simple &event.

    Ma question est la suivante... Pourquoi ? ^^

    Je voulais me contenter d'envoyer un &SDL_Event à ma fonction pour directement aller chercher event->motion->x dans ma fonction, mais cela ne semble pas fonctionner, mais s'il s'agit d'un &SDL_MouseMotionEvent et que je fais  event->x cela fonction, je ne comprends pas la logique ? 

    J'espère que ma question est claire ? Je peux ajouter des lignes de codes si nécessaire, mais ma question étant générique je ne sais pas si c'est réellement important (sauf si je me suis trompé quelque part). 

    Par ailleurs, je ne sais même pas si c'est une bonne idée ce que je fais, peut-être qu'il y a un moyen plus simple de gérer le click de la souris sur une texture ^^ 

    En tout cas merci d'avance pour explications/retours ! 

    • Partager sur Facebook
    • Partager sur Twitter
      26 novembre 2020 à 14:08:57

      Bonjour,

      Ici il y a une doc en français avec des exemples qui peut sans doute t'aider:

      https://alexandre-laurent.developpez.com/tutoriels/sdl-2/les-evenements/#LII-A

      • Partager sur Facebook
      • Partager sur Twitter
      Architecture SDL                     Multithreading         
        26 novembre 2020 à 18:01:09

        picosoft a écrit:

        Bonjour,

        Ici il y a une doc en français avec des exemples qui peut sans doute t'aider:

        https://alexandre-laurent.developpez.com/tutoriels/sdl-2/les-evenements/#LII-A


        Merci pour ta réponse, mais je n'ai pas l'impression de trouver la réponse à ma question là-dedans :/ Ou alors je ne comprends pas quelque chose
        • Partager sur Facebook
        • Partager sur Twitter
          26 novembre 2020 à 20:25:54

          L'erreur est probablement dues à ton code car dans l'absolu, tu peux passer SDL_Event qui est une union te permettant d'accéder à la struct SDL_MouseMotionEvent si l'événement est effectivement lié au déplacement de la souris.

          En général, dans un programme SDL, tu as une boucle principale qui traite les événements par type. Une fois que tu as déterminé dans cette boucle que tu as affaire à un événement de type SDL_MOUSEMOTION, il est beaucoup plus simple d'appeler ta fonction en passant directement les coordonnées de la souris event.motion.x, event.motion.y.

          Si tu envoies à ta fonction un SDL_Event pour des événements qui ne sont pas de ce type, ta fonction va être inutilement appelée pour des événements qu'elle ne sait pas gérer et, derrière, tu n'accèderas bien sûr pas aux structures de données auxquelles tu penses pouvoir accéder.

          -
          Edité par Dlks 26 novembre 2020 à 20:26:34

          • Partager sur Facebook
          • Partager sur Twitter
            27 novembre 2020 à 0:48:38

            Dlks a écrit:

            L'erreur est probablement dues à ton code car dans l'absolu, tu peux passer SDL_Event qui est une union te permettant d'accéder à la struct SDL_MouseMotionEvent si l'événement est effectivement lié au déplacement de la souris.

            En général, dans un programme SDL, tu as une boucle principale qui traite les événements par type. Une fois que tu as déterminé dans cette boucle que tu as affaire à un événement de type SDL_MOUSEMOTION, il est beaucoup plus simple d'appeler ta fonction en passant directement les coordonnées de la souris event.motion.x, event.motion.y.

            Si tu envoies à ta fonction un SDL_Event pour des événements qui ne sont pas de ce type, ta fonction va être inutilement appelée pour des événements qu'elle ne sait pas gérer et, derrière, tu n'accèderas bien sûr pas aux structures de données auxquelles tu penses pouvoir accéder.

            -
            Edité par Dlks il y a environ 4 heures


            D'accord ça doit venir de là alors ! Je l'utilise dans le case: SDL_MOUSEBUTTONDOWN du switch event.type, et je vérifie si au moment du clique le curseur est bien sur la texture en envoyant &event à ma fonction.

            Merci pour ta réponse. 

            • Partager sur Facebook
            • Partager sur Twitter

            Question event SDL 2 (C)

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown