我购买了罗技游戏手柄 F310 来远程控制机器人。我在 Linux Mint(版本 18,Sarah)上使用 Pygame(版本 1.9.1,Python 版本 2.7.11+)。
作为检查操纵杆功能的简单测试,我编写了这个简短的脚本,用于输出不同轴的值:
import pygame
pygame.display.init()
pygame.joystick.init()
pygame.joystick.Joystick(0).init()
# Get the name of the joystick and print it
JoyName = pygame.joystick.Joystick(0).get_name()
print "Name of the joystick:"
print JoyName
# Get the number of axes
JoyAx = pygame.joystick.Joystick(0).get_numaxes()
print "Number of axis:"
print JoyAx
# Print the values for the axes
pygame.event.pump()
print pygame.joystick.Joystick(0).get_axis(0)
print pygame.joystick.Joystick(0).get_axis(1)
print pygame.joystick.Joystick(0).get_axis(2)
print pygame.joystick.Joystick(0).get_axis(3)
无论运行脚本时轴位于什么位置,我总是得到以下输出:
Name of the joystick:
Logitech Gamepad F310
Number of axis:
6
SDL_JoystickGetAxis value:0:
0.0
SDL_JoystickGetAxis value:0:
0.0
SDL_JoystickGetAxis value:0:
0.0
SDL_JoystickGetAxis value:0:
0.0
我理解输出“SDL_joystick.Joystick(0).getAxis 值”是因为开发人员在编译源代码时保留了调试标志。但我不明白为什么脚本为所有轴值返回 0,而它们不在 0 位置。
我已经使用 jstest-gtk 包测试了操纵杆。使用这个包,可以顺利运行。我的代码有错误吗?
我在windows下运行了代码,运行顺利。知道为什么它在 Linux 发行版下不起作用吗?
从对问题的编辑中提取。
在最初的代码(上面没有发布)中,我有一个 while 循环,但我犯了一个菜鸟错误,将pygame.event.pump()
while 循环之外的行。我现在学习如何使用这个模块的代码非常完美。
import pygame
pygame.display.init()
pygame.joystick.init()
pygame.joystick.Joystick(0).init()
# Prints the joystick's name
JoyName = pygame.joystick.Joystick(0).get_name()
print "Name of the joystick:"
print JoyName
# Gets the number of axes
JoyAx = pygame.joystick.Joystick(0).get_numaxes()
print "Number of axis:"
print JoyAx
# Prints the values for axis0
while True:
pygame.event.pump()
print pygame.joystick.Joystick(0).get_axis(0)
我确实需要花一些时间来调整和重新编译joystick.c源代码以摆脱“SDL_joystick.Joystick(0).getAxis 值:0:” 打印输出。显然这个问题已经存在好几年了,但 Ubuntu/Mint 尚未得到解决。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)