我正在使用 pygame 构建一个菜单,我想使用特定的游戏手柄使其可导航。理想情况下,我希望能够在 D-pad 上反复按下并按住“*”,或者在键盘上获得类似的东西,其中第一个按钮按下有延迟,然后再重复输入相同的字符(似乎)。
我正在尝试模拟pygame.key.set_repeat(...)
操纵杆的功能。到目前为止,我的方法是
pygame.time.set_timer(pygame.USEREVENT, 10)
DELAY_TIME = 0.250 #ms
y_delay = True
while not done:
for event in pygame.event.get():
y_axis = gamepad.get_axis(1)
if y_axis > 0.5: # pushing down
main_menu.move_down()
redraw() #redraw everything on the surface before sleeping
if y_delay:
time.sleep(DELAY_TIME)
y_delay = False #don't delay the next time the y axis is used
elif y_axis < -0.5: #pushing up
# repetitive I know, but I'm still working on it
main_menu.move_up()
redraw()
if y_delay:
time.sleep(DELAY_TIME)
y_delay = False
else:
y_delay = True # delay the next time
我的问题是,如果有人向上或向下点击的速度超过了他们再次移动之前DELAY_TIME
的限制。DELAY_TIME
此外,如果有人在间隔内释放并按下向上/向下按钮time.sleep
,python 永远不会看到它被释放并且不允许延迟。
也许有一种方法可以使用事件或以某种方式将操纵杆映射到键?qjoypad 不适合我,joy2keys 是垃圾。我需要在 python 程序中进行映射。