我一直无法找到直截了当的答案。
key.set_repeat()
适用于KEYDOWN
个事件,但不适用于key.get_pressed()
:
import sys, pygame
from pygame.locals import *
pygame.init()
Clock = pygame.time.Clock()
pygame.display.set_mode((200, 100))
pygame.key.set_repeat(1, 500)
while True:
if pygame.key.get_pressed()[K_UP]:
print('up!')
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
if event.key == K_DOWN:
print('down!')
Clock.tick(30)
即使是最轻微的点击UP也会爆炸至少几个,只有下来!s被推迟了。我想使用key.get_pressed()
,因为它可以方便地处理多个输入。我是否需要使用某种类型的计数器来解决它?或者,有没有办法处理多个KEYDOWN
事件?
答案 0 :(得分:1)
如果你不需要,请不要乱用key.set_repeat()
。
只需使用key.get_pressed()
来检查按下的按键以及按下按键的位置对您有意义,例如在按下K_LEFT
时向左移动。
当您在单键按下时,使用event.get()
/ KEYDOWN
,例如像按K_P
之类的东西会暂停游戏。
如果你弄乱key.set_repeat()
,例如将延迟设置为低,您将无法识别单个击键,因为每个击键将创建多个KEYDOWN
事件。
要处理多个KEYDOWN
事件,只需检查相关事件即可。每个击键都会产生KEYDOWN
事件,因此您可以简单地检查,例如:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_DOWN:
print('down!')
elif event.key == K_UP:
print('up!')
如果用户一直按下按键,那么当然会多次打印up!
/ down!
。
黄金法则是:如果您对单个密钥的KEYDOWN
和KEYUP
事件进行了强调,请更好地使用key.get_pressed()
。
即使是最轻微的点击UP也会爆炸至少几个!s,只有下来!s被推迟
那是因为事件系统与key.get_pressed()
完全不同。如果您在多个帧上按K_UP
,则会打印每个帧'up!'
,因为在每个帧中按下了键。 key.get_pressed()
简单返回在您调用此函数时按下哪些键。换句话说:你不能“延迟”它。