Как разделить триггеры на контроллерах XBOX One?

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

Я ничего не видел о контроллерах Xbox One в документах 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


person AGCodes    schedule 31.12.2016    source источник


Ответы (1)


Первый:

Из https://en.wikipedia.org/wiki/DirectInput#DirectInput_vs_XInput:

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

Второй:

Pygame — это привязка SDL.

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

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

ИЗМЕНИТЬ:

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

person Sasszem    schedule 31.12.2016
comment
Спасибо за вашу помощь! - person AGCodes; 01.01.2017