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 :

Probléme test mouvement clavier


Sujet :

SDL

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 44
    Points : 17
    Points
    17
    Par défaut Probléme test mouvement clavier
    Bonjour,
    Je suis en cours de crée une application en c++, j'ai utilisé la librairie SDL pour détecté la mouvement de clavier, pour la test d'une seule touche tout se passe bien mais je veux testé deux touche en même temps.

    voila mon code pour la teste d'une seule touche:

    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
    SDL_Surface *ecran = NULL;
        SDL_Event event; /* La variable contenant l'événement */
        int continuer = 1; /* Notre booléen pour la boucle */
     
       SDL_Init(SDL_INIT_VIDEO);
     
       ecran = SDL_SetVideoMode(350, 250, 32, SDL_HWSURFACE);
       SDL_WM_SetCaption("Gestion des evenements en SDL", NULL);
     
       while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
    	   return continuer;
     
             break;
            case SDL_KEYDOWN:
     
    		if(event.key.keysym.sym==SDLK_UP){
    		   cout << "Appui sur la touche Haut" <<endl;
     
    		   continuer = 0;
     
    		}
     
                break;
        }
    }
        SDL_Quit();
     
        return continuer;
    je fai quoi pour tester deux touches en même temps? aide moi svp

  2. #2
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par matwia Voir le message
    j'ai utilisé la librairie SDL pour détecté la mouvement de clavier
    Le mouvement d'un clavier , ton clavier c'est une manette wii ?

    Citation Envoyé par matwia Voir le message
    je fai quoi pour tester deux touches en même temps? aide moi svp
    Euh c'est quoi exactement le souci ? tu veux genre tester si la touche haut et bas est appuyer ?

    Si c'est le cas faut faire comme ceci par contre je suis pas sur que ça marche avec WaitEvent (je sais pas ce qu'il renvoie) , et vu que je ne l'utilise jamais.

    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
     
    while(SDL_WaitEvent(&event))
    {
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
    	   return continuer;
     
             break;
            case SDL_KEYDOWN:
     
    		if(event.key.keysym.sym==SDLK_UP){
    		   cout << "Appui sur la touche Haut" <<endl;
     
     
    		}
     
                     if(event.key.keysym.sym==SDLK_DOWN){
    		   cout << "Bas" <<endl;
     
     
    		}
     
                break;
        }
    }

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    merci pour votre reponse kannagi, oui je veux tester si la touche haut et bas est appuyer en même temps.
    j'ai testé ce code mais il teste juste la premier touche (touche haut) et sortit de la boucle

  4. #4
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par matwia Voir le message
    merci pour votre reponse kannagi, oui je veux tester si la touche haut et bas est appuyer en même temps.
    j'ai testé ce code mais il teste juste la premier touche (touche haut) et sortit de la boucle
    Bon par doute apres ton message j'ai testé et mon code marche D= , merci d'avoir perdu mon temps

    Voici le code tout de meme :
    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
     
    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL;
        SDL_Event event; /* La variable contenant l'événement */
        int continuer = 1; /* Notre booléen pour la boucle */
     
        SDL_Init(SDL_INIT_VIDEO);
     
        ecran = SDL_SetVideoMode(350, 250, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("Gestion des evenements en SDL", NULL);
     
        while (continuer)
        {
            while(SDL_WaitEvent(&event))
            {
                switch(event.type)
                {
                    case SDL_QUIT:
                        continuer = 0;
                        return 0;
                    break;
                    case SDL_KEYDOWN:
                        if(event.key.keysym.sym==SDLK_UP)
                        {
                           printf("haut\n");
     
     
                        }
     
                        if(event.key.keysym.sym==SDLK_DOWN)
                        {
                           printf("bas\n");
     
     
                        }
     
                    break;
                }
            }
     
        }
        SDL_Quit();
     
     
        return 0;
    }
    il prend bien le haut et le bas en même temps.


    Par contre j'avais précisé que pas sur du renvoie de WaitEvent et apparemment il est toujours vrai (doit renvoyer si tous c'est bien passé ou un truc du genre)du coup la boucle ne sert a rien =P

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while(SDL_WaitEvent(&event))
    {
     
        //
    }
    // il faut mieux faire ceci en faite
    SDL_WaitEvent(&event);
    Mais le mieux c'est utiliser PollEvent (surtout si t'as intention de faire un jeu).

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    merci Kannagi et désolé pour pour la perdre de votre temps
    j'ai testé votre code et ça marche mais la problème est l’enchaînement de mon application je veux tester dans un seule if , merci une autre fois

  6. #6
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Inutile de me vouvoyer
    Sinon pour mon ironie , c'est plus pour mettre des choses evidente (je parle pas de la prog) , mais mon code marchait , tu as dit que il marchait pas il fallait détailler ce qui ne marche pas ect , pour recevoir de aide autant dire le plus de détails possible , vu que j'ai perdu ma boule de cristal

    Pour ma premiere remarque t'as bien deviné que mouvement d'un clavier , ça veut rien dire ben si tu peux bouger ton clavier mais bon j'en vois pas intérêt , tu peux pas récupérer ce genre info (a part pour une WII) mais les touche clavier si .

    Par contre j'ai pas compris" enchainement de ton application "et "de vouloir faire un seul if" , par logique ton ordi lui aussi n'est pas devin ,si tu veux voir si d'autre touche sont appuyé t'es obligé de les vérifier avec une condition , sauf si tu parle de la syntaxe tu peux faire un seul if dans une boucle pour tester toute les conditions.

  7. #7
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 623
    Points : 1 554
    Points
    1 554
    Par défaut
    Hello,

    Je crois que matwia souhaite savoir si deux touches sont enfoncées (ou restent enfoncées) simultanément.

    Si c'est le cas, voici un petit morceau de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Uint8 *keystate = SDL_GetKeyState(NULL);
     
    if ( keystate[SDLK_RETURN] ) printf("Return Key Pressed.\n");
    if ( keystate[SDLK_RIGHT] && keystate[SDLK_UP] ) printf("Right and Up Keys Pressed.\n");
    // Et dans le cas présent, tataam....
    if( keystate[SDLK_UP] && keystate[SDLK_DOWN] ) printf("Up and down keys pressed.\n);
    Edgar.
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    merci beaucoup mon problème est résolu.

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

Discussions similaires

  1. [UBUNTU] Problèmes avec mon clavier
    Par Franck.H dans le forum Ubuntu
    Réponses: 4
    Dernier message: 25/07/2006, 22h20
  2. Richeditctrl - problème de saisie clavier
    Par KO-Tek dans le forum MFC
    Réponses: 5
    Dernier message: 20/12/2005, 11h15
  3. [Tableaux] Problème test script
    Par masseur dans le forum Langage
    Réponses: 6
    Dernier message: 03/12/2005, 18h48
  4. problème de caractères clavier!!!
    Par brunetc dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 10/06/2005, 13h39
  5. Problème d'écouteur clavier
    Par m@t dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 19/01/2005, 22h05

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