Как эффективно держать ключ в 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()

Но вы нажимаете клавишу «Вниз» не более одной секунды, и она печатается тысячи раз. (Переместить игрока было бы невозможно, и настройка часов для этого, кажется, не является правильным способом справиться с этим (и я пытался, и у меня ничего не получалось.)).

Нажать и выполнить блок тысячи раз бесполезно. Что я хочу, так это нажать клавишу и продолжать действие, пока я не отпущу его, в пределах заданной тактовой частоты игры.

Ответы на вопрос(7)

Ваш ответ на вопрос