我希望能够独立检测触发器拉动,但触发器似乎共享一个轴。
我在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
答案 0 :(得分:1)
首先:
来自https://en.wikipedia.org/wiki/DirectInput#DirectInput_vs_XInput:
截至2011年
XInput
适用于Xbox 360
个控制器,而DirectInput
适用于任何控制器
第二
Pygame是一种SDL绑定。
如果pygame
有XInput
,则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周围创建一个包装器。