Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C]Débuts avec SDL

Traiter un clic enfoncé

    21 décembre 2005 à 20:01:46

    Bonjour !
    Je viens de me mettre à SDL, et je m'en sors plus ou moins bien.
    J'ai réussi à créer des rectangles via le clic de la souris :p
    Maintenant, j'aimerai pouvoir créer des rectangles tant que le bouton est enfoncé (un paint quoi).
    J'ai beau chercher, je trouve pas.

            if(SDL_PollEvent(&event))
            {
                          if(event.type == SDL_QUIT)
                          {
                                   break;
                          }
                          while(event.type == SDL_MOUSEBUTTONDOWN)
                          {
                                   mouseX= event.motion.x;
                                   mouseY= event.motion.y;
                                   affichage_rect();
                                   SDL_PollEvent(&event);
                          }
            }

    Comme vous pouvez le voir, ceci est ma boucle principale.
    J'ai tenté de rajouter une boucle pour tester le bouton de la souris, mais ça ne fonctionne pas non plus.
    Doit bien exister une fonction non ?

    Merci de m'aiguiller, et de me pardonner si je suis totalement à coté de la plaque :D

    • Partager sur Facebook
    • Partager sur Twitter
      21 décembre 2005 à 20:20:42

      La seule méthode que j'avait trouvée, c'était de faire une srte de Méga-Fonction qui remplissait de 0 et de 1 un tableau. Dans mon cas, c'était pour le clavier, et j'ai toujours pas trouver comment on pouvait faire un cas général, mais pour une souris, c'est rapide... ;) Par contre, je l'ait fait en c++ car j'avais besoin de la surcharge des fonctions par fénéantise... :p je te recode ça en c pour la souris et j'édite, mais bon, l'idée générale, c'est que ta fonction possède un tableau contenant des int (deux, un pour chaque case de ta souris), qu'elle change la valeur de la case en cas d'appui sur la souris, et qu'elle la remet à zéro en cas de relachement... Avec une méthode pour attraper la valeur des variables, ça passe.

      EDIT : Au fait, ma méthode ne marche vraiment qu'en c++... :(

      EDIT 2 : Non, avec juste une souris, je fait une "fonction" interne et ça passe.

      int main()
      {
      int souris;/*essaie de le remplacer par un tableau, mais je me suis jamais servit de la souris, et j'ai pô compris comment on avait l'identité du bouton de la souris, donc je fait un cas pour n'importe quel bouton ... à toi le modifier le code pour les deux boutons, mais ça devrait pas être trop dur...*/
      SDL_Event event;

      /***********/

      if(SDL_PollEvent(&event) && event.type == SDL_MOUSEBUTTONDOWN) //si on a un évenement, et que c'est l'APPUI sur le bouton
              souris = 1;
      else if (SDL_PollEvent(&event) && event.tupe == SDL_MOUSEBUTTONUP)
              souris = 0;

      if(souris)
      {
      //là, tu à ta fonction lorsque le bouton de la souris est appuyé...
      }


      Je n'ais malheureusement pas trouvé comment on identifiait le bouton qui était appuyé, mais ça te laisse un petit peu de suspense ... et une petite recherche sur internet (que je n'ais malheureusement pas le temps de faire aujourdhui) devrait compléter cela.

      a+, bon courage
      • Partager sur Facebook
      • Partager sur Twitter
        3 janvier 2006 à 20:14:10

        Si tu veut (désolé de reposter dans un si vieux topic), j'ai trouver une méthode encore meilleure pour tout traitement d'interactoin avec le clavier et la souris en C avec SDL. Je pense bien que tu n'en n'as plus besoin, mais ça peut toujours servir à d'autres personnes, et comme c'est (toujours) en raport avec le topic ^^...
        Voici la source :
        /*
        * Cette fonction met à jour les évenements de la clavier et de la souris.
         * Utilise les variables suivantes sont passées en paramètres, et doivent donc avoir été déclarées comme telle dans le main :
         * char clavier[300], souris[3];
         * int xsouris, ysouris, xrelsouris, yrelsouris;
         */


        #include <sdl/sdl.h>

        #include "SDL_clavier_souris.h"

        void SDL_UpdateEvents(char & clavier[300], char & souris[3], int & xsouris, int & ysouris, int & xrelsouris, int & yrelsouris)
        {
                SDL_Event event;
                while(SDL_PollEvent(&event))
                {
                        switch(event.type)
                        {
                                case SDL_KEYDOWN:
                                        clavier[event.key.keysym.sym] = 1;
                                        break;

                                case SDL_KEYUP:
                                        clavier[event.key.keysym.sym] = 0;
                                        break;

                                case MOUSEMOTION:
                                        xsouris = event.motion.x;
                                        ysouris = event.motion.y;
                                        xrelsouris = event.motion.xrel;
                                        yrelsouris = event.motion.yrel;
                                        break;

                                case MOUSEBUTTONDOWN:
                                        souris[event.button.button-1] = 1;
                                        break;

                                case MOUSEBUTTONUP:
                                        souris[event.button.button-1] = 1;
                                        break;
                        }
                }
        }


        Citation : Exemple

        Ca te permettra d'utiliser tout ce qui est des touches du clavier :
        Pour tester si la touche "HAUT" est enfoncée, il faut faire :

        if(clavier[SDL_KEYUP])
            ...


        Voila, je pense que ça peut être utilise si tu veut optimiser par rapport à ce que je t'avais donner, et ça servira toujours à quelqu'un...
        • Partager sur Facebook
        • Partager sur Twitter

        [C]Débuts avec SDL

        × 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