2016-12-31 46 views
5

Chciałbym móc wykryć wyzwalacze niezależnie, ale wyzwalacze wydają się dzielić jedną oś.Jak podzielić wyzwalacze na kontrolerach XBOX One?

Nie widziałem niczego na kontrolerach Xbox One w dokumentach MSDN, ale w przypadku kontrolerów Xbox 360 wyzwalacze DirectInput dzielą oś, a XInput udostępnia osobne osie dla każdego wyzwalacza. Sugeruje to, że pygame używa DirectInput zamiast Xinput, ale nie wiem, jak wymusić pygame, aby zamiast niego używać Xinput.

(Jak) mogę wymusić na pygame użycie xinput zamiast bezpośredniego wprowadzania? Jeśli to naprawdę nie jest możliwe, chciałbym użyć innego języka.

Używam tego skryptu do zapoznania wejście od kontrolera:

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: Nie mam w tej chwili czasu, aby napisać to w całości, ale w międzyczasie znalazłem Kod ten, który wydaje się działać dla mnie (na kontrolerze Xbox One Spectra): https://github.com/r4dian/Xbox-360-Controller-for-Python

Odpowiedz

1

pierwsze:

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

od 2011 XInput jest Xbox 360 kontrolerów, natomiast DirectInput jest dla każdego kontrolera

drugie:

Pygame stanowi SDL wiążące.

Więc pygame może mieć XInput wsparcia jeżeli SDL ma. Niestety, SDL nie ma. Powód jest taki, jak wcześniej pisałem, DirectInput jest bardziej popularny. Sprawdź również: http://forums.libsdl.org/viewtopic.php?t=6352&sid=35bdc1b1615f9ea081671ff548a7e360

Nadal można napisać otoki wokół XInput API, jeśli chcesz.

EDIT:

repo jesteś związany w używa ctypes do tworzenia otoki wokół API XInput.

+0

Dzięki za pomoc! – AGCodes