如何在XBOX One控制器上拆分触发器?

时间:2016-12-31 19:25:26

标签: python pygame xbox-one

我希望能够独立检测触发器拉动,但触发器似乎共享一个轴。

我在MSDN文档中的Xbox One控制器上看不到任何内容,但对于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

编辑:我现在没有时间完全写出来,但与此同时,我发现这段代码似乎对我有用(在Xbox One上) Spectra控制器):https://github.com/r4dian/Xbox-360-Controller-for-Python

1 个答案:

答案 0 :(得分:1)

首先:

来自https://en.wikipedia.org/wiki/DirectInput#DirectInput_vs_XInput

  

截至2011年XInput适用于Xbox 360个控制器,而DirectInput适用于任何控制器

第二

  

Pygame是一种SDL绑定。

如果pygameXInput,则SDL可以获得SDL支持。可悲的是,DirectInput没有。 原因是我之前写的,XInput API更受欢迎。 还可以看看: http://forums.libsdl.org/viewtopic.php?t=6352&sid=35bdc1b1615f9ea081671ff548a7e360

如果你愿意的话,你仍然可以在@Override public void validate(Object o, Errors errors) { Product product = (Product) o; if (product.getTitle().isEmpty() || product.getTitle() == null) { errors.rejectValue("title", "product.title", "Product title cant be empty"); } if (product.getDescription().isEmpty() || product.getDescription() == null) { errors.rejectValue("description", "product.description", "Product description cant be empty"); } if (product.getPrice().isNaN() || product.getPrice()<=0 || product.getPrice() == null) { errors.rejectValue("price", "product.price", "Product price is not valid"); } if (product.getCategory()==null) { errors.rejectValue("category", "product.category", "Product category is not valid"); } } 周围写一个包装器。

修改

您链接的repo使用ctypes在XInput API周围创建一个包装器。