Python >> Tutoriel Python >  >> Python GUI >> Pygame GUI

Comment identifier le bouton sur lequel vous appuyez sur la manette PS4 à l'aide de pygame

J'ai trouvé un hack :

Les boutons PS4 sont numérotés comme suit :

0 = SQUARE

1 = X

2 = CIRCLE

3 = TRIANGLE

4 = L1

5 = R1

6 = L2

7 = R2

8 = SHARE

9 = OPTIONS

10 = LEFT ANALOG PRESS

11 = RIGHT ANALOG PRESS

12 = PS4 ON BUTTON

13 = TOUCHPAD PRESS

Pour savoir sur quel bouton j'appuie, j'ai utilisé j.get_button(int) , en transmettant l'entier du bouton correspondant.

Exemple :

import pygame

pygame.init()

j = pygame.joystick.Joystick(0)
j.init()

try:
    while True:
        events = pygame.event.get()
        for event in events:
            if event.type == pygame.JOYBUTTONDOWN:
                print("Button Pressed")
                if j.get_button(6):
                    # Control Left Motor using L2
                elif j.get_button(7):
                    # Control Right Motor using R2
            elif event.type == pygame.JOYBUTTONUP:
                print("Button Released")

except KeyboardInterrupt:
    print("EXITING NOW")
    j.quit()

Vous êtes vraiment proche ! Avec quelques ajustements, votre code devient ceci :

import pygame

pygame.init()
j = pygame.joystick.Joystick(0)
j.init()

try:
    while True:
        events = pygame.event.get()
        for event in events:
            if event.type == pygame.JOYAXISMOTION:
                print(event.dict, event.joy, event.axis, event.value)
            elif event.type == pygame.JOYBALLMOTION:
                print(event.dict, event.joy, event.ball, event.rel)
            elif event.type == pygame.JOYBUTTONDOWN:
                print(event.dict, event.joy, event.button, 'pressed')
            elif event.type == pygame.JOYBUTTONUP:
                print(event.dict, event.joy, event.button, 'released')
            elif event.type == pygame.JOYHATMOTION:
                print(event.dict, event.joy, event.hat, event.value)

except KeyboardInterrupt:
    print("EXITING NOW")
    j.quit()

Certaines ressources que j'ai trouvées utiles pour écrire la documentation sur les événements de pygame, l'utilisation de dir de python fonction pour voir quelles propriétés possède un objet python, et la documentation de la bibliothèque C parente de pygame, SDL si vous vouliez une explication plus approfondie de ce que la propriété signifie réellement. J'ai inclus à la fois la version d'accès au dictionnaire (en utilisant event.dict ) ainsi que la version d'accès à la propriété (en utilisant uniquement event.whatever_the_property_name_is ). Notez que event.button ne vous donne qu'un numéro ; c'est à vous de créer manuellement un mappage de la signification de chaque numéro de bouton sur votre manette. J'espère que cela éclaircit !