2016-12-31 5 views
5

Я хотел бы иметь возможность обнаруживать триггерные тяги независимо друг от друга, но триггеры, похоже, имеют одну ось.Как разбить триггеры на XBOX Один контроллер?

Я ничего не видел в Xbox Один контроллер в документах MSDN, но для контроллеров Xbox 360 триггеры DirectInput используют ось, а XInput выделяет отдельные оси каждому триггеру. Это говорит о том, что pygame использует DirectInput, а не Xinput, но я не знаю, как заставить pygame использовать Xinput.

(Как) могу ли я заставить pygame использовать xinput вместо прямого ввода? Если это не реально, я бы хотел использовать другой язык.

Я использую этот скрипт для чтения ввода из контроллера:

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: У меня нет времени на данный момент, чтобы написать это в полном объеме, но в то же время, я нашел это код, который, кажется, работает для меня (на контроллере Xbox One Spectra): https://github.com/r4dian/Xbox-360-Controller-for-Python

ответ

1

Первое:

от https://en.wikipedia.org/wiki/DirectInput#DirectInput_vs_XInput:

По состоянию на 2011 XInput для Xbox 360 контроллеров, в то время как DirectInput для любого контроллера

Второе:

Pygame является СДЛ связывания.

Так pygame может иметь поддержку XInput если SDL имеет. К сожалению, SDL не имеет. Причина в том, что я писал раньше, DirectInput более популярен. Также проверьте: http://forums.libsdl.org/viewtopic.php?t=6352&sid=35bdc1b1615f9ea081671ff548a7e360

Вы все еще можете написать обертку вокруг XInput API, если вы хотите.

EDIT:

РЬИХ вы связаны использования ctypes, чтобы создать оболочку вокруг XInput API.

+0

Благодарим за помощь! – AGCodes