Я создаю меню с помощью pygame и хочу сделать его доступным для навигации с помощью определенного геймпада. В идеале я хочу иметь возможность многократно нажимать и удерживать * «вниз» на крестовине или получить что-то вроде клавиатуры, где первое нажатие кнопки имеет задержку перед повторным вводом одного и того же символа (по-видимому).
Я пытаюсь эмулировать функцию 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.