Как эффективно держать ключ в Pygame?
[РЕДАКТИРОВАТЬ] Я разместил решение там. [/РЕДАКТИРОВАТЬ]
Я нашел два связанных вопроса:
Удержание клавиши Pygame вызывает бесконечный циклpygame - кнопка удержания нажатаНо я хочу быть конкретным. Как?
while not done:
for e in event.get():
if e.type == KEYDOWN:
keys = key.get_pressed()
if e.type == QUIT or keys[K_ESCAPE]:
done = True
if keys[K_DOWN]:
print "DOWN"
Когда я нажимаю стрелку вниз, она печатает, но печатает только один раз. Если я хочу напечатать это в другой раз, мне нужно нажать еще раз.
Если я вместо этого использую ключевое слово while,
while keys[K_DOWN]:
print "DOWN"
Я получаю бесконечный цикл по какой-то непонятной причине.
Эта логическая альтернатива также бесполезна:
if ((e.type == KEYDOWN) and keys[K_DOWN]):
print "DOWN"
И есть еще один, который каким-то образом очищает события, и вы можете использовать while:
while not done:
for e in event.get():
if e.type == KEYDOWN:
keys = key.get_pressed()
if e.type == QUIT or keys[K_ESCAPE]:
done = True
while keys[K_DOWN]:
print "DOWN"
event.get()
keys = key.get_pressed()
Но вы нажимаете клавишу «Вниз» не более одной секунды, и она печатается тысячи раз. (Переместить игрока было бы невозможно, и настройка часов для этого, кажется, не является правильным способом справиться с этим (и я пытался, и у меня ничего не получалось.)).
Нажать и выполнить блок тысячи раз бесполезно. Что я хочу, так это нажать клавишу и продолжать действие, пока я не отпущу его, в пределах заданной тактовой частоты игры.