IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Gérer un click souris long.


Sujet :

SDL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de anakronox
    Inscrit en
    Novembre 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 49
    Par défaut Gérer un click souris long.
    Bonjour, j'ai débuté avec la SDL il y a environ 2 semaines. J'ai vu les bases, et je me demande s'il existe une fonction pour gérer un click long avec la souris (un peux comme le SDL_EnableKeyRepeat pour le clavier).
    Pour être plus précis, j'essaie de faire un "mini" paint avec un petit rectangle(image) noir. Le problème c'est que je n'arrive à coller qu'une seule image du rectangle à la fois(donc à chaques cliques de la souris).
    Si quelqu'un connait une solution pour obtenir le même résultat qu'avec paint ce serait super. Merci d'avance pour toute aide.

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Tu utilises un état "bouton appuyé" avec un booléen. Lorsqu'un bouton est appuyé, cet état passe à vrai, et lorsque le bouton est relaché, il passe à faux.

    Ensuite, tu géres l'état de mouvement avec l'événement SDL_MOUSEMOTION. Si le booléeen est à vrai, tu colles l'image, sinon rien.

    Et voilà

    Jc

  3. #3
    Membre averti Avatar de anakronox
    Inscrit en
    Novembre 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 49
    Par défaut
    Merci pour la réponse, j'ai déjà penser à cette solution mais j'ai débuté la programmation en C cette année et donc je ne suis pas encore à l'aise avec les booléens(pas encore vu en cours).Pourriez vous m'expliquer la démarche s'il vous plait.

  4. #4
    Membre émérite
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Par défaut
    Un boolean est comme un int sauf qu'il n'est fait que pour contenir 1 ( true ) ou 0 ( false ).

  5. #5
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Happy Voir le message
    Un boolean est comme un int sauf qu'il n'est fait que pour contenir 1 ( true ) ou 0 ( false ).

    Exact, je dis booléen mais si tu programmes en C, cela donnerait juste un entier qui prend des valeurs de 0 ou 1. Et ensuite tu fais un simple test dessus.

    Jc

  6. #6
    Membre averti Avatar de anakronox
    Inscrit en
    Novembre 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 49
    Par défaut
    Oui je vois comment ça se presente(j'en ai utilisé un pour la boucle principale).Mon probleme c'est pour l'introduire dans le programme, par rapport aux fonctions souris proposées par la SDL .Si vous pouvez m'aider à comprendre ce qu'il faut faire, voici ma source:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<SDL/SDL.h>
     
    int main(int argc, char *argv[])
    {
        int continuer = 1; //pour la boucle principale
        int clickleft = 0;
     
        SDL_Surface *ecran;
        SDL_Surface *pointeur;
        SDL_Rect positionPointeur;
        SDL_Event event;
     
        SDL_Init(SDL_INIT_VIDEO);
     
        SDL_WM_SetCaption("Mon paint tentative 1",NULL);
     
        ecran = SDL_SetVideoMode(640,480,32,SDL_HWSURFACE | SDL_DOUBLEBUF);
     
        if(ecran == NULL)
        {
                 fprintf(stderr,"Erreur d'initialisation %s\n",SDL_GetError());
                 exit(EXIT_FAILURE);
        }
     
        pointeur = SDL_LoadBMP("pointeur.bmp"); //chargement de l'image
     
        //initialisation de la position du pointeur
        positionPointeur.x = ecran->w/2 - pointeur->w/2;
        positionPointeur.y = ecran->h/2 - pointeur->h/2;
     
        SDL_ShowCursor(SDL_DISABLE);//masque le curseur de la souris
     
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format,255,255,255));
        SDL_Flip(ecran);
        while(continuer)
        {
              SDL_WaitEvent(&event);
              switch(event.type)
              {
                   case SDL_QUIT : continuer = 0;
                   break;
                   case SDL_MOUSEBUTTONDOWN:
                         switch (event.button.button)
                         {  
                         case SDL_BUTTON_LEFT : clickleft=1;
                         break;
                         }
                   case SDL_MOUSEBUTTONUP:
                         switch (event.button.button) 
                         {    
                         case SDL_BUTTON_RIGHT : 
                                                //*pour effacer l'ecran
                                                SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                                                SDL_BlitSurface(pointeur,NULL,ecran,&positionPointeur);
                                                SDL_Flip(ecran);
                         break;
                         case SDL_BUTTON_LEFT : clickleft=0;
     
                         }
     
     
     
                   case SDL_MOUSEMOTION:
                   positionPointeur.x = event.motion.x; 
                   positionPointeur.y = event.motion.y;
                   break;
     
                   case SDL_KEYDOWN :
                        switch(event.key.keysym.sym)
                        {
                             case SDLK_ESCAPE : continuer = 0;
                             break;
     
                        }
                   break;
              }
              if(clickleft = 1)
              /*Je n'ai pas trouver une methode pour coller continuellement le pointeur lors du clickleft=1 */
     
     
     
        }
     
        SDL_FreeSurface(pointeur);
        SDL_Quit();
     
        return EXIT_SUCCESS;
    }

  7. #7
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    il suffit juste de coller le rectangle où est la souris, et après tu refermes le if.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Simuler un Click souris
    Par helmout dans le forum Windows Forms
    Réponses: 13
    Dernier message: 13/12/2007, 01h59
  2. [J2SE] selection dans jList par click souris
    Par rupteur dans le forum Composants
    Réponses: 6
    Dernier message: 01/12/2005, 12h36
  3. Comment différencier un click court, long et double ?
    Par tipiweb dans le forum Composants VCL
    Réponses: 2
    Dernier message: 26/07/2005, 19h20
  4. Simulation de click souris
    Par Nats dans le forum Windows
    Réponses: 5
    Dernier message: 07/02/2005, 20h51
  5. [Kylix] Simluler des click souris
    Par paci dans le forum EDI
    Réponses: 2
    Dernier message: 24/06/2003, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo