Saltar al contenido

Cómo identificar qué botón se está presionando en el controlador de PS4 usando pygame

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!

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *