我可以在没有“视频系统”的情况下使用pygame,仅用于游戏手柄输入吗?
我正在尝试制作一个由树莓派控制的机器人。具体来说,我想用游戏手柄来操控这个机器人。我在我的电脑上写了以下代码,用来捕捉游戏手柄的输入:
import pygame
pygame.init()
joystick = pygame.joystick.Joystick(0)
joystick.init()
done = False
while not done:
event = pygame.event.poll()
if event.type == 1538:
print(event.dict['value'])
if event.type == 1540:
done = True
这段代码会在你按下导航十字键的某个按钮时打印出一个值(比如说 (1, 0)),如果按下了其他按钮,它就会停止运行。
但是,当我在树莓派上运行这段代码时,出现了一个错误:
pygame.error: video system not initialized
我猜问题出在我是在命令行中运行代码,而pygame需要一个窗口来显示视频输出。但我并不想要任何输出,我只是想用pygame来读取输入。有没有办法让pygame只做这个呢?
更新
看起来pygame无法实现我想要的功能(可以参考rabbid76的回答)。在寻找替代方案的过程中,我发现了一个叫做inputs的模块。以下代码可以在树莓派零上正常工作,并且可以用来读取输入:
from inputs import get_gamepad
done = False
while not done:
events = get_gamepad()
for event in events:
print(event.code)
print(event.state)
print(event.ev_type)
我建议你自己运行这段代码,看看输出结果。我的电脑和树莓派零上的输出值是不同的,所以你可能需要找到适合你具体情况的代码。
1 个回答
0
不,你不能这样做。看看 pygame.event
:
Pygame通过一个事件队列来处理所有的事件消息。这个模块里的功能可以帮助你管理这个事件队列。输入队列很依赖于
pygame.display
模块来控制显示窗口和屏幕。如果显示窗口没有初始化,或者视频模式没有设置,事件队列可能就无法正常工作。
所以,你需要一个窗口和视频系统来处理事件。