Pygame 不返回操纵杆轴运动无显示
Pygame not returning joystick axis movement without display
我看到此问题的其他解决方案表明您需要调用 pygame.event.pump() 或在 while 循环之外初始化操纵杆。但是,即使使用这些解决方案,我得到的操纵杆轴值也为 0。
如果我只取消对 pygame.display.set_mode((1, 1))
的注释,那么代码会按预期工作,并且值会输出到控制台。
有没有办法在不必创建额外的 window 的情况下仍然获取轴值?
此外,我 运行 python 3.6 Windows 10.
import pygame
FRAMES_PER_SECOND = 20
pygame.init()
pygame.joystick.init()
# pygame.display.set_mode((1,1))
# Used to manage how fast the screen updates.
clock = pygame.time.Clock()
xboxController = pygame.joystick.Joystick(0)
xboxController.init()
# Loop until the user presses menu button
done = False
print('Found controller\nStarting loop...')
while not done:
pygame.event.pump()
for event in pygame.event.get():
if event.type == pygame.JOYBUTTONDOWN and event.button == 7:
print(f'Exiting controller loop')
done = True
for i in range(xboxController.get_numaxes()):
print(f'Axis {i}: {xboxController.get_axis(i)}')
# pygame.display.flip()
clock.tick(FRAMES_PER_SECOND)
输出:
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
Found controller
Starting loop...
Axis 0: 0.0
Axis 1: 0.0
Axis 2: 0.0
Axis 3: 0.0
Axis 4: 0.0
.
.
.
好的,在我发布这篇文章 5 分钟后找到了答案。问题是我使用的是 pygame 1.9.6 而不是 2.0.0.dev8。更新后,我得到的控制台输出没有显示 window.
我可能会放弃 Pygame,除非您需要整个底层 GL
功能,因为该库用于 2D/3D 游戏开发。尽管可以将它用于这些目的,但问题或多或少是不可避免的。一个可能更简单的方法是使用 python 的 input 库,它可以处理游戏手柄(操纵杆)。
from inputs import get_gamepad
while True:
events = get_gamepad()
for event in events:
if event.ev_type == 'Absolute':
if event.code == 'ABS_X':
print(f'Left joystick x: {event.state}')
elif event.code == 'ABS_Y':
print(f'Left joystick y: {event.state}')
elif event.code == 'ABS_RX':
print(f'Right joystick x: {event.state}')
elif event.code == 'ABS_RY':
print(f'Right joystick y: {event.state}')
我看到此问题的其他解决方案表明您需要调用 pygame.event.pump() 或在 while 循环之外初始化操纵杆。但是,即使使用这些解决方案,我得到的操纵杆轴值也为 0。
如果我只取消对 pygame.display.set_mode((1, 1))
的注释,那么代码会按预期工作,并且值会输出到控制台。
有没有办法在不必创建额外的 window 的情况下仍然获取轴值?
此外,我 运行 python 3.6 Windows 10.
import pygame
FRAMES_PER_SECOND = 20
pygame.init()
pygame.joystick.init()
# pygame.display.set_mode((1,1))
# Used to manage how fast the screen updates.
clock = pygame.time.Clock()
xboxController = pygame.joystick.Joystick(0)
xboxController.init()
# Loop until the user presses menu button
done = False
print('Found controller\nStarting loop...')
while not done:
pygame.event.pump()
for event in pygame.event.get():
if event.type == pygame.JOYBUTTONDOWN and event.button == 7:
print(f'Exiting controller loop')
done = True
for i in range(xboxController.get_numaxes()):
print(f'Axis {i}: {xboxController.get_axis(i)}')
# pygame.display.flip()
clock.tick(FRAMES_PER_SECOND)
输出:
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
Found controller
Starting loop...
Axis 0: 0.0
Axis 1: 0.0
Axis 2: 0.0
Axis 3: 0.0
Axis 4: 0.0
.
.
.
好的,在我发布这篇文章 5 分钟后找到了答案。问题是我使用的是 pygame 1.9.6 而不是 2.0.0.dev8。更新后,我得到的控制台输出没有显示 window.
我可能会放弃 Pygame,除非您需要整个底层 GL
功能,因为该库用于 2D/3D 游戏开发。尽管可以将它用于这些目的,但问题或多或少是不可避免的。一个可能更简单的方法是使用 python 的 input 库,它可以处理游戏手柄(操纵杆)。
from inputs import get_gamepad
while True:
events = get_gamepad()
for event in events:
if event.ev_type == 'Absolute':
if event.code == 'ABS_X':
print(f'Left joystick x: {event.state}')
elif event.code == 'ABS_Y':
print(f'Left joystick y: {event.state}')
elif event.code == 'ABS_RX':
print(f'Right joystick x: {event.state}')
elif event.code == 'ABS_RY':
print(f'Right joystick y: {event.state}')