Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [joystick] Utiliser le dpad et le stick  (Lu 6772 fois)

0 Membres et 1 Invité sur ce sujet

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
[joystick] Utiliser le dpad et le stick
« le: Février 26, 2013, 03:03:52 pm »
Salut,

j'ai un peu chercher mais je n'ai rien trouver concernant le dpad (croix directionnelle) d'une manette afin de l'utiliser en parralèle avec un stick. Dans mon jeu j'aimerais laisser le choix à l'utilisateur entre le dpad ou le stick. Il existe une touche sur les manette PC qui permet de switcher, mais pas tous. J'ai trouvé une solution pour utiliser le dpad mais il faut bien entendu passer en mode dpad depuis la manette mais n'y a t-il pas un accès direct au dpad ?

Merci


Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [joystick] Utiliser le dpad et le stick
« Réponse #1 le: Février 26, 2013, 03:12:52 pm »
Ca dépend du driver de ta manette. Si le dpad n'est mappé sur aucun axe par défaut, c'est qu'il faut absolument passé par le switch sur la manette. Tu peux tester tous les axes pour voir, soit avec un petit programme SFML, soit avec l'utilitaire de configuration de joystick de ton OS.
Laurent Gomila - SFML developer

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : [joystick] Utiliser le dpad et le stick
« Réponse #2 le: Février 26, 2013, 03:25:04 pm »
J'avais essayé rapidement avec un cout qui renvoit l'id de chaque touche préssé. la flèche haut et bas renvoit id 7 et la flèche droite et gauche renvoit 6. C'est tous ce que j'ai pu en tirer. Du coup, je me suis résigner à utiliser uniquement le stick pour le moment en attendant d'avoir des infos.

La manette est une Dual Action de chez Logitech et j'utilise le driver natif de Linux.

En tout cas merci pour ta réponse.

Edit : je trouve étrange que la croix directionnelle a pour id 7/6 alors que j'ai deux boutons qui ont comme id 7/6.
« Modifié: Février 26, 2013, 03:29:26 pm par shingo »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [joystick] Utiliser le dpad et le stick
« Réponse #3 le: Février 26, 2013, 03:30:16 pm »
Tu es sûr que tu les as testé en tant que boutons et pas en tant qu'axes ?
Laurent Gomila - SFML developer

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : [joystick] Utiliser le dpad et le stick
« Réponse #4 le: Février 26, 2013, 03:38:39 pm »
Voilà le code :

// GamePad
    if (Joystick::isConnected(0))
    {
       cout << "id:" << event.joystickButton.button << endl;
        if (Joystick::getAxisPosition(0,Joystick::Y)>0)
        {
            sound.play();
            select_count += 1;
        }
   
        if (Joystick::getAxisPosition(0,Joystick::Y)<0)
        {
            sound.play();
            select_count -= 1;
        }
    }

J'ai essayé avec une autre manette sous la main, et c'est pareil.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [joystick] Utiliser le dpad et le stick
« Réponse #5 le: Février 26, 2013, 03:42:08 pm »
D'où sort "event" ?

Il ne faut pas faire ça, fais plutôt une boucle qui scanne tous les axes et affiche leur valeur en continu. Puis vois ceux qui varient quand tu touches à ton dpad.
Laurent Gomila - SFML developer

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : [joystick] Utiliser le dpad et le stick
« Réponse #6 le: Février 26, 2013, 03:49:46 pm »
Le code provient de ma classe menu qui est appellé via menu.update(); Donc quand je lance le jeu, il me renvoit en continu l'id de chaque touche, d'ailleurs sur le second pad, on voit que le calibrage est mauvais car ça défile sans cesse sans avoir besoin d'appuyer.

 while (game.isOpen())
    {
        while (game.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                game.close();
            if (gameStatut == _menu)
                menugame.Update();
        }

Le résultat en appuyant sur le dpad :

Citer
id:6
id:6
id:7
id:7
id:7
id:7
id:6
id:6
id:6
id:7
id:6
id:6
id:7
id:7
id:6
id:6
id:7
id:7
id:6
id:6
id:7
id:7
id:6
id:6
id:7
id:6
id:7
id:7
« Modifié: Février 26, 2013, 03:52:15 pm par shingo »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [joystick] Utiliser le dpad et le stick
« Réponse #7 le: Février 26, 2013, 03:55:46 pm »
Et avant d'utiliser event.joystickButton, tu t'es bien entendu assuré que le type d'évènement est Event::JoystickButtonPressed ?

Je pense que tu fais n'importe quoi avec les évènements (il y a d'autres choses louches dans ton code), et que tu devrais relire attentivement le tutoriel correspondant.
Laurent Gomila - SFML developer

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : [joystick] Utiliser le dpad et le stick
« Réponse #8 le: Février 26, 2013, 04:07:06 pm »
En effet, je ne devrais pas appeller mon update à cet endroit. Je viens de percuter.

Avec le code du tuto :

     if (event.type == sf::Event::JoystickButtonPressed)
{
    std::cout << "joystick button pressed!" << std::endl;
    std::cout << "joystick id: " << event.joystickButton.joystickId << std::endl;
    std::cout << "button: " << event.joystickButton.button << std::endl;
}
         

La croix directionnelle ne renvoit rien.

edit : j'ai essayé en passant pas axis, et cela ne marche naturellement qu'avec le switch. Donc je pense qu'il me sera impossible d'utiliser le dpad.
« Modifié: Février 26, 2013, 04:11:51 pm par shingo »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [joystick] Utiliser le dpad et le stick
« Réponse #9 le: Février 26, 2013, 04:36:27 pm »
Essaye avec l'utilitaire standard de joystick (me souviens plus du nom sous Linux), histoire d'être parfaitement sûr que c'est comme ça que fonctionne la manette.
Laurent Gomila - SFML developer

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : [joystick] Utiliser le dpad et le stick
« Réponse #10 le: Février 26, 2013, 05:05:46 pm »
Oui, je viens de tester et ça confirme bien qu'il n'est possible d'utiliser directement le DPAD sans switcher. Ca fait longtemps que je n'ai pas jouer avec cette manette, donc je ne connais pas vraiment son comportement dans les jeux, mais sur XNA, je pouvais accéder directement au DPAD grâce à SlimDX puisque ce n'est pas une manette de Xbox 360.



Sinon pour les event, c'était plus ou moins volontaire de ma part, du moins provisoire. Car je suis en train de programmer le menu du jeu histoire de commencer doucement avec SFML et je trouvais que Event::Joystick répondait bien trop rapidement alors que si je faisais appel à Window::pollEvent, le délait de réponse était convenable. Du coup, je suis bien repassé par Event::Joystick et j'ai gérer le tout avec un time histoire de vérifier chaque évènement à un intervale de 120 milisecondes. C'est du moins comme ça que je fonctionnais avec XNA. Je ne sais pas si pour SFML c'est la bonne méthode...
« Modifié: Février 26, 2013, 05:07:39 pm par shingo »

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : [joystick] Utiliser le dpad et le stick
« Réponse #11 le: Mars 30, 2013, 05:22:49 pm »
Par mégarde, j'ai trouvé une façon de faire fonctionner les croix directionnels. Je viendrais donner le numéro des touches... Pour le moment, la touche de bas est 37... Bizarre non ? J'ai découvert cela lors d'une erreur dans mon fichier de configuration des touches, mon code a enregistré les touches clavier sur ceux de la manette... 37 est la touche ctrl...
« Modifié: Mars 30, 2013, 05:57:58 pm par shingo »

shingo

  • Jr. Member
  • **
  • Messages: 97
    • Voir le profil
Re : [joystick] Utiliser le dpad et le stick
« Réponse #12 le: Mai 03, 2013, 02:24:38 pm »
Je viens donner quelques nouvelles après avoir trouvé la façon dont utiliser les croix directionnelles de n'importe quelle manette. Il suffit simplement d'utiliser PovX et PovY, je ne sais pas pourquoi je l'ai pas essayé plus tôt, enfin bref ça marche super bien que se soit avec une manette de PS3 / Xbox 360 etc.