Solución:
Descubrí un truco:
Los botones de PS4 están numerados de la siguiente manera:
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
Para averiguar qué botón se está presionando utilicé j.get_button(int)
, pasando el entero del botón correspondiente.
Ejemplo:
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()
¡Estás muy cerca! Con algunos ajustes, su código se convierte en esto en su lugar:
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()
Algunos recursos que encontré útiles para escribir el up incluían la documentación de eventos de pygame, el uso de python dir
función para ver qué propiedades tiene un objeto de Python, y la documentación de la biblioteca C principal de Pygame, SDL, si desea una explicación más profunda de lo que realmente significa la propiedad. Incluí tanto la versión de acceso al diccionario (usando event.dict
) así como la versión de acceso a la propiedad (usando solo event.whatever_the_property_name_is
). Tenga en cuenta que event.button
solo te da un número; Depende de usted crear manualmente un mapeo de lo que significa cada número de botón en su controlador. ¡Espero que esto lo aclare!