это кажется очень тривиальной проблемой, но после нескольких часов поиска и экспериментов я не смог найти единственное решение.
Я использую проклятия, чтобы перемещать своего робота с помощью клавиш клавиатуры, он работает как задумано но, во-первых, каждый раз, когда выполняется «getch ()», он выполняет предыдущие нажатые клавиши, даже если ничего не нажимается, что создает ситуацию «запаздывания».
Это очень простой сценарий, который Я создал, чтобы объяснить себя, здесь, скажем, я нажимаю 'a', который работает правильно, я держу его нажатым еще около 4 секунд и отпускаю, теперь этот код будет выполняться снова и снова, даже если ничего не нажимается, потому что curses выполнит его x раз для всех нажатых мною за это времени 'a'. sleep:
import curses
import time
stdscr = None
def SetupCurses():
global stdscr
stdscr = curses.initscr()
curses.cbreak()
stdscr.keypad(1)
def StartCurse():
key = ''
while key != ord('q'):
stdscr.clear()
stdscr.refresh()
key = stdscr.getch()
if key == ord('a'):
print("\nyou pressed a\n")
time.sleep(5)
print("\nyou can press a again\n")
time.sleep(1)
while(True):
SetupCurses()
StartCurse()
Итак, я подумал, ну, я не хотел этого делать, но я полностью убью проклятия и подключите его снова, прежде чем проверять ключи, но даже после этого проклятия, похоже, собирают ключи, которые не должны (и мне это очень не нравится в любом случае, я чувствую, что мне не нужно закрывать его вот так, если я буду использовать его снова и снова), этот сценарий будет иметь ту же проблему, что и сценарий выше:
import curses
import time
stdscr = None
def SetupCurses():
global stdscr
stdscr = curses.initscr()
curses.cbreak()
stdscr.keypad(1)
def StartCurse():
key = ''
while key != ord('q'):
stdscr.clear()
stdscr.refresh()
key = stdscr.getch()
if key == ord('a'):
break
def EndCurse():
global stdscr
curses.nocbreak()
stdscr.keypad(False)
curses.echo()
curses.endwin()
stdscr = None
while(True):
SetupCurses()
print("\nyou can press a again\n")
time.sleep(1)
StartCurse()
EndCurse()
time.sleep(5)
print("\nyou pressed a\n")
Мой вопрос: есть ли какой-то код, который делает:
curses.ClearAnyPreviousInput()
ThisKeyIsBeingPressedRightNow = stdscr.getch()
если возможно, что-то, что не заставляет меня убивать и перезапускать все снова