问题描述
这两段代码输出的是同一个东西。它们之间有什么区别?我们何时应该更喜欢使用一种而不是另一种?
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_LEFT:
xc=-4
if event.key==pygame.K_RIGHT:
xc=+4
if event.key==pygame.K_UP:
yc=-4
if event.key==pygame.K_DOWN:
yc=+4
if event.type==pygame.KEYUP:
if event.key==pygame.K_LEFT or event.key==pygame.K_RIGHT:
xc=0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
yc=0
pressed=pygame.key.get_pressed()
if pressed[pygame.K_LEFT]:
xc=-4
elif pressed[pygame.K_RIGHT]:
xc=+4
else:
xc=0
if pressed[pygame.K_UP]:
yc=-4
elif pressed[pygame.K_DOWN]:
yc=+4
else:
yc=0
解决方法
键盘事件(参见 pygame.event 模块)仅在键的状态改变时发生一次。 KEYDOWN
事件在每次按下键时发生一次。 KEYUP
每次释放键时出现一次。将键盘事件用于单个操作或逐步移动。
pygame.key.get_pressed()
返回一个包含每个键状态的列表。如果某个键被按下,则该键的状态为 True
,否则为 False
。使用 pygame.key.get_pressed()
评估按钮的当前状态并获得连续移动。
另见:
,pygame.KEYDOWN
事件仅在第一次按下键时触发。您可以使用 pygame.key.set_repeat() 自定义此行为,以便在按下键时以固定速率触发,但使用此方法无法使其与帧速率完全匹配。这通常用于文本输入,或者当首先按下某个键时应该发生一次操作。
无论 pressed
的设置如何,只要按下该键,就可以使用 set_repeat
。这通常用于在按下键时每一帧都应该发生的事情。