2016-12-31 3 views
5

J'aimerais pouvoir détecter les déclenchements de déclencheurs indépendamment, mais les déclencheurs semblent partager un seul axe. Je n'ai rien vu sur les contrôleurs Xbox One dans les documents MSDN, mais pour les contrôleurs Xbox 360, les déclencheurs DirectInput partagent l'axe, et XInput donne des axes séparés à chaque déclencheur. Cela suggère que pygame utilise DirectInput plutôt que Xinput, mais je ne sais pas comment forcer pygame à utiliser Xinput à la place. (Comment) puis-je forcer pygame à utiliser xinput au lieu d'une entrée directe? Si ce n'est pas vraiment possible, je serais prêt à utiliser une langue différente.Comment diviser les triggers sur les contrôleurs XBOX One?

J'utilise ce script pour lire l'entrée du contrôleur:

import pygame 
pygame.init() 

screen = pygame.display.set_mode((400,400)) 
joysticks = [] 

for i in range(0, pygame.joystick.get_count()): 
    joysticks.append(pygame.joystick.Joystick(i)) 
    joysticks[-1].init() 

while True: 
    for event in pygame.event.get(): 
     print event 

EDIT: Je n'ai pas le temps au moment d'écrire ceci dans son intégralité, mais en attendant, je trouve ce code qui semble fonctionner pour moi (sur une Xbox un contrôleur Spectra): https://github.com/r4dian/Xbox-360-Controller-for-Python

Répondre

1

Première:

de https://en.wikipedia.org/wiki/DirectInput#DirectInput_vs_XInput:

En 2011 XInput est pour Xbox 360 contrôleurs, alors que DirectInput est à tout contrôleur

Deuxièmement:

Pygame est une liaison SDL.

Alors pygame peut avoir XInput soutien si SDL a. Malheureusement, SDL n'a pas. La raison est ce que j'ai écrit avant, DirectInput est plus populaire. Consultez également: http://forums.libsdl.org/viewtopic.php?t=6352&sid=35bdc1b1615f9ea081671ff548a7e360

Vous pouvez toujours écrire un wrapper autour XInput API, si vous voulez.

EDIT:

Le repo vous Linked in utilisations ctypes pour créer une enveloppe autour de l'API XInput.

+0

Merci pour votre aide! – AGCodes