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 :

Les boutons d'un joystick avec la SDL


Sujet :

SDL

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Les boutons d'un joystick avec la SDL
    Bonjour,

    Je veux faire un simple et bête programme qui me permet d'obtenir les informations sur les boutons lorsque j'appuie dessus.
    Seulement voilà, les premières infos s'effectuent sans problème, en revanche arrivé au stade 'évènement' , je n'ai pas de sortie lorsque j'appuie sur un bouton de ma manette.


    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <SDL.h>
     
    void pause();
     
    int main(int argc,char **argv)
    {
    	int i;
    	SDL_Joystick *joystick = NULL;
     
    	SDL_Init(SDL_INIT_JOYSTICK);
    	printf("Il y a %d joysticks détectés\n", SDL_NumJoysticks());
    	for(i=0;i<SDL_NumJoysticks();i++) printf("----> %d = %s\n",i,SDL_JoystickName(i));
     
    	SDL_JoystickEventState(SDL_ENABLE);
    	joystick = SDL_JoystickOpen(0);
     
    	printf("\n");
    	printf("----> %d boutons\n", SDL_JoystickNumButtons(joystick));
    	printf("----> %d axes\n", SDL_JoystickNumAxes(joystick));
     
    	pause();
     
    	SDL_JoystickClose(joystick);
    	SDL_Quit();
     
    	return EXIT_SUCCESS;
    }
     
    void pause()
    {
        int continuer = 1;
        SDL_Event event;
     
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_JOYBUTTONDOWN:
    		printf("Bouton N°%d\n",event.jbutton.button);
    		break;
    	    default:
    		break;
            }
        }
    }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    daedalus11@debian:~/projets/sdzSDL$ ./sdzSDL 
    Il y a 4 joysticks détectés
    ----> 0 = Xbox 360 Wireless Receiver
    ----> 1 = Xbox 360 Wireless Receiver
    ----> 2 = Xbox 360 Wireless Receiver
    ----> 3 = Xbox 360 Wireless Receiver
     
    ----> 15 boutons
    ----> 6 axes
    ^C
    daedalus11@debian:~/projets/sdzSDL$

    D'autant plus comme vous pouvez le constater, il me détecte 4 joysticks alors que j'en ai qu'un.
    Pour arrêter la boucle je dois faire un Ctrl+C .

    Une idée du pourquoi mon printf() ne fait pas son effet dans la boucle d'évènements?

  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
    Étrange qu'il détecte 4 joystick ,je test chez moi il me met 0.
    J'ai un joystick mais je l'ai prêté a qql pour le moment je re-testerai quand on me le rendra.
    Normalement ça devrait marché , chez moi j'ai pas eu ce problème bizarrement et ton code m'a l'air correct.

    Pour arrêter la boucle je dois faire un Ctrl+C
    Il y a une boucle infinie ou ?
    J'aurais pensé dans les évènements mais vu que tu as mis SDL_WaitEvent(&event);

    Par contre SDL_QUIT , c'est quand on appuie sur la touche fermé d'une fenêtre donc tu peux pas quitté le programme,alors soit tu met un touche pour quitté la boucle(genre touche echap) soit tu ouvre une fenêtre.

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'ai un joystick mais je l'ai prêté a qql pour le moment je re-testerai quand on me le rendra.
    Normalement ça devrait marché , chez moi j'ai pas eu ce problème bizarrement et ton code m'a l'air correct.
    Si tu peux tester dès que tu en as la possibilité ça m'arrangerait pas mal . Particulièrement pour savoir si ça vient du code ou pas.

    Il y a une boucle infinie ou ?
    J'aurais pensé dans les évènements mais vu que tu as mis SDL_WaitEvent(&event);

    Par contre SDL_QUIT , c'est quand on appuie sur la touche fermé d'une fenêtre donc tu peux pas quitté le programme,alors soit tu met un touche pour quitté la boucle(genre touche echap) soit tu ouvre une fenêtre.
    Merci de l'info, c'est vrai que pour le coup je me suis contenté d'un code vraiment minimaliste donc le SDL_QUIT n'a pas vraiment sa place ici.

    Petite précision: la SDL avec ma manette fonctionne. Je l'utilise avec l'émulateur Mupen64Plus. Sauf qu'il faut configurer manuellement chaque bouton pour chaque touche car c'est mal associée. Et je ne peux savoir à l'avance le numéro de bouton de ma manette .

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Problème résolu.

    La solution est qu'il faut inclure également l'initialisation de la vidéo avec SDL_INIT_VIDEO dans SDL_Init() .
    Sinon la gestion des évènements ne fonctionne pas.

  5. #5
    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
    Je comprend mieux , bah c'est je que je me disais au début mais après réflexion je me disais qu'il devait être indépendant de la Video vu que le nom est 'SDL_INIT_JOYSTICK' mais apparemment non

    Sinon la gestion des évènements ne fonctionne pas.
    mmh essaye de faire des tests et dis moi si il affiche quelque chose.

    voila le code que je te propose pour test :
    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
     
    while(SDL_PollEvent(&event) == 1)
    {
            switch(event.type)
            {
               case SDL_QUIT:
                    continuer = 0;
               break;
     
               case SDL_JOYBUTTONDOWN:
                    for(i=0;i<10;i++)
                        if (event.jbutton.button == i)
                            printf("touche joypad %d\n",i);
     
                break;
            }
    }

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

Discussions similaires

  1. Gestion des événements des joysticks avec la SDL
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 07/02/2013, 22h34
  2. [maxthon]pb avec les boutons de côtés de ma souris
    Par arfy dans le forum Autres Logiciels
    Réponses: 11
    Dernier message: 09/10/2005, 11h15
  3. Problème avec les boutons de perl Tk
    Par jkevin2 dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 02/09/2005, 17h18
  4. Focus sur les boutons avec plusieurs formulaire
    Par davids21 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/04/2005, 15h48

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