3

I'm developing an application that uses pygame to read analog trigger values from an XBox 360-Style gamepad. This application relies on the triggers being initialized to the neutral position, or else it results in undefined behaviour.

The problem: analog triggers are interpreted as axes in pygame and those get initialized to 0 until they receive the first user input. But the neutral position (triggers are not pressed) of the triggers is mapped to -1.0.

So, until I somehow press both triggers, the signal I receive is “half-pressed” for both triggers, although I'm not pressing anything.

Is there a way to specify the initial state of the Joystick object? I already tried to define a custom JOYAXISMOTION event which didn't help.

Minimal code example:

import pygame
import time

pygame.joystick.init()

if pygame.joystick.get_count() <= 0:
    print("No joystick or gamepad found")
    exit()

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

print(device.get_numaxes())

while True:
    pygame.event.get()

    # here, it prints 0.0, 0.0 when not touching the triggers, 
    # until I press them
    print("Left trigger: {}\t Right trigger: {}".format(device.get_axis(2),  # left trigger
                                                        device.get_axis(5)))  # right trigger

    time.sleep(0.1)
Prunebutt
  • 31
  • 2
  • Do you intend to use only one of the triggers or both? Pygame treats them as one axis, so I'm not sure if there's a solution if you need both triggers. – skrx Nov 13 '18 at 22:23
  • Huh? Weird, that's not what I experienced. In my application, both were recognized as their own axis (2 and 5, as seen in my snippet) – Prunebutt Nov 14 '18 at 15:12
  • Hmm, maybe it depends on the gamepad. Both triggers control the value of axis 2 for me. When I hold the left one the value is 1 and when I hold the right one it's -1. There's no axis 5, so your code (`device.get_axis(5)`) raises a `pygame.error: Invalid joystick axis` here. Which pygame version do you use? I have 1.9.4. – skrx Nov 14 '18 at 15:19
  • I'm also using version 1.9.4. I guess it depends on the gamepad, then. I'm using the Logitech F710 in Xinput mode. – Prunebutt Nov 15 '18 at 10:23
  • 2
    Interestingly this problem is solved on pygame 2.0.0dev6 – Baskara Dec 17 '19 at 21:33

0 Answers0