如何使用pygame检测按键?

问题描述

我正在 pygame 中制作射击游戏,但是这段代码

checkfocus = pygame.key.get_focused()
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
#THIS PART DOES NOT WORK
            if event.type == pygame.K_w:
                print(checkfocus)
                print("up")
                pygame.key.set_repeat(0,1)
                yvalue -= 20
                if yvalue < 0:
                    yvalue = 0
                print(yvalue)
                pygame.time.wait(100)
                screen.fill((52,61,82))
                screen.blit(harryshoot,(20,yvalue))
                pygame.display.flip()

不知何故不起作用,尽管其他 if event.type 代码工作正常。这里有什么问题?为什么只有这段代码没有键盘输入?我试过更改密钥,但这没有帮助。(print("up") 也没有显示,所以不是代码本身不起作用)。

解决方法

pygame.K_w 不是事件类型,而是键。您需要验证事件类型为 pygame.KEYDOWN 且键为 pygame.K_w

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key== pygame.K_w:
                # [...]

键盘事件 KEYDOWNKEYUP(参见 pygame.event 模块)创建一个带有附加属性的 pygame.event.Event 对象。按下的键可以从 key 属性(例如 K_RETURN K_a)获得,mod 属性包含一个带有附加修饰符的位集(例如 {{1} })。 KMOD_LSHIFT 属性提供键盘输入的 Unicode 表示。