如何解决Pygame中KEYDOWN事件持续循环触发的问题?
问题解决:按下Delete键仅触发一次操作
你的问题出在键盘事件的判断位置:你把KEYDOWN的判断放在了事件遍历循环的外面,主循环每执行一次,就会重复检查上一次的event对象,只要之前是Delete键的按下事件,就会持续打印内容。
正确的做法是把键盘事件的判断逻辑放到for event in pygame.event.get()的循环内部,这样每个KEYDOWN事件只会被处理一次:
import pygame import sys sprite = "sprite_1.jpg" position = (20,0) canvas = pygame.display.set_mode((952, 592)) color = (255,255,255) exit = False back = pygame.image.load("th.jpg").convert_alpha() back = pygame.transform.scale(back, (952,592)) Sprite = pygame.image.load(sprite) Sprite.set_colorkey((255,255,255)) Sprite = pygame.transform.scale(Sprite, (35,35)) pygame.display.set_caption("Game") while not exit: canvas.fill(color) canvas.blit(back, dest = (0,0)) canvas.blit(Sprite, dest=position) for event in pygame.event.get(): if event.type == pygame.QUIT: exit = True # 把键盘事件判断移到事件循环内部 elif event.type == pygame.KEYDOWN: if event.key == pygame.K_DELETE: print("hi") pygame.display.update()
补充说明
pygame.event.get()会一次性取出当前所有的事件,遍历处理每个事件时,每个KEYDOWN事件只会被捕获一次,自然也就只会触发一次打印操作。- 如果放在循环外面,主循环的帧率很高,每次都会重复检查最后一个
event对象,导致重复触发。
内容的提问来源于stack exchange,提问作者Programmer
相关产品推荐
相关产品推荐

