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 :

DPAD non reconnu


Sujet :

SDL

  1. #1
    Membre habitué
    Avatar de Shinja
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 153
    Points : 156
    Points
    156
    Par défaut DPAD non reconnu
    Bonjour, je suis débute en SD2 et je rencontre une difficulté concernant la détection de ma manette USB (manette SEGA Mega Drive USB). Cette dernière à bien un DPAD qui n'est pas reconnu par la SDL2 comme l'indique la fonction SDL_JoystickNumHats()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        // joystick
        if(SDL_NumJoysticks())
        {
            joystick = SDL_JoystickOpen(0);
            SDL_JoystickEventState(true);
            printf("INFO: Joystick detected: %d\n", SDL_NumJoysticks());
            printf("INFO: Joystick number hats: %d\n", SDL_JoystickNumHats(joystick));
        }
    Lors de l'exécution :

    [kentosama@archlinux sprite]$ ./sprite
    libpng warning: bKGD: invalid index
    INFO: Joystick detected: 1
    INFO: Joystick number hats: 0

    A la place, se sont les axes qui changent de valeur quand j'appuie sur la croix directionnelle.

    Je voudrais savoir s'il existe un moyen de contourner le problème afin d'utiliser le DPAD de ma manette. Pour info j'utilise SDL2 sous Linux. Ce qui m'intrigue, c'est que je ne rencontre pas de problème avec les programmes développé en SDL.

    Merci pour votre aide.

  2. #2
    Membre habitué
    Avatar de Shinja
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 153
    Points : 156
    Points
    156
    Par défaut
    OK j'ai trouvé.

    Il ne faut pas utiliser SDL_Joystick, mais passé par GameController. C'est un peu difficile de s'y retrouver au vu du manque de documentation, la plupart des tutoriels expliquaient justement que je devais passer par SDL_Joystick.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Un game controller est un joystick pour la SDL, mais l'inverse n'est pas vrai.
    Un joystick est un controller plus basique. Un game controller représente en gros une manette xbox 360 (boutons, sticks, triggers, dpad).
    https://wiki.libsdl.org/CategoryGameController
    Tu peux vérifier si ton input est reconnu comme game controller ou non avec SDL_IsGameController pour savoir si tu dois utiliser les API game controller ou joystick.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  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
    Un peu étrange que SDL_Joystick ne marche pas ,vu que chez moi il reconnaît toute mes manette , même les manettes XBOX/PS2/PS3 .

    (mais Bousk a bien expliquer le souci je pense ^^ )

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Vous parlez de "hats", mais les hats, ce sont les mini joysticks sur la manette.
    Lorsque vous parlez de dpad (ou croix directionnelle), ceux-ci sont détecter en tant que axes (fonction SDL_JoystickGetAxis() et SDL_JoystickGetNumAxis()). D'ailleurs, dans mon tutoriel sur les événements de la SDL2, je donne un code d'exemple pour voir comment sont reconnus les boutons : https://alexandre-laurent.developpez...ents/#LIII-C-4
    Donc pour moi, ce que vous décrivez est normal.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre habitué
    Avatar de Shinja
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 153
    Points : 156
    Points
    156
    Par défaut
    Salut, j'ai fini par comprendre que ma manette dispose de deux interfaces : xinput et direct input. Je m'en suis rendu compte en voulant jouer à un jeu sur Steam et j'étais étonné que la manette n'était reconnue. En appuyant longtemps sur le bouton start, l'interface switch.

    D'ailleurs après avoir switchée impossible de retrouver le fonctionnement du dpad dans mon programme ^^

    Idéalement il faut donc être en xinput, mais on peut également prendre en charge les manettes direct input comme je le faisais.

    Bien que j'ai réussi à faire fonctionne mon pad avec la SDL2, il y a tout de même un problème avec ce dernier, car il m'est impossible de créer un mapping avec l'outil dédié. Le DPAD ne fonctionne pas correctement malheureusement et je vais devoir tout faire à la mano afin de pouvoir correctement les boutons :/

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

Discussions similaires

  1. [Lomboz] [JBoss] JBoss 3.2.6 non reconnu par Lomboz ?
    Par romain3395 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 17/12/2004, 16h35
  2. Commandes non reconnues.
    Par Manu' dans le forum Administration système
    Réponses: 3
    Dernier message: 07/10/2004, 17h09
  3. [EJB] [JSP] Méthode EJB non reconnue dans jsp
    Par stago dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 06/07/2004, 09h52
  4. Creation de table, caractère non reconnu
    Par Missvan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 17/02/2004, 13h28
  5. xslt_create() non reconnu
    Par BRAUKRIS dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 11/12/2003, 14h43

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