Я пишу программу, в которой есть игра l oop, которая ищет различные нажимаемые клавиши в качестве индикаторов для определенных действий (по сути, превращая определенные клавиши в кнопки, которые выполняют свои функции при нажатии):
import keyboard
import sys
import time
ticks = 0 #counts number of game loop iterations that have been done
while True:
starttick = time.time() #used to record how much time the tick takes, to keep it stable at 20 tps.
ticks += 1
if keyboard.is_pressed('q'): #q is for quit
keyboard.send('backspace', do_press=True, do_release=True)
sys.exit()
endtick = time.time()
if keyboard.is_pressed('t'): #t is for ticks
keyboard.send('backspace', do_press=True, do_release=True)
print(ticks)
time.sleep(abs(.05 - (endtick - starttick))) #Finds how much time the tick took, and then subtracts that from 1/20th of a second to wait the appropiate time (abs is for avoiding negative wait times.)
Смысл keyboard.send('backspace', do_press=True, do_release=True)
состоит в том, чтобы удалить нажатый символ из консоли (я делаю это в Kubuntu.) Однако, что в итоге происходит, когда я нажимаю или удерживаю T, это:
t1571
1572
1573
1574
1575
1576
1577
1578
1579
Как видите, до выхода первого тика все еще впереди, и это именно то, чего я пытаюсь избежать. (В этом случае следует отметить, что я все время удерживаю t).
Аналогичная раздражающая вещь происходит, когда я нажимаю (нажимаю или удерживаю) q- это почти сразу же после возврата, но есть ~ полсекундная задержка перед выходом из программы.
Первоначально я использовал keyboard.press_and_release('backspace')
, и, заметив проблему, я переключился на keyboard.send
, но это не помогло устранить лаг.
Кто-нибудь знает, как избежать этих проблем?