pygame中关于键盘事件的疑问

pygame中当我想要斜着移动时发现并不可行,于是写了个验证代码,结果发现好像并不支持and这一用法,同时如果我错误的按下一个没有意义的键位,程序不会正常运行
这两个问题该如何解决??

import pygame
pygame.init()
s=pygame.display.set_mode((600,400))
pygame.display.set_caption("Pygame!")
while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT and event.key == pygame.K_UP:
                print("left up")
            elif event.key == pygame.K_RIGHT:
                print("right")
            elif event.key == pygame.K_UP:
                print("up")
            elif event.key == pygame.K_DOWN:
                print("down")

    pygame.display.update()


努力の小熊参考Chatgpt做出的回答:
①斜着移动的问题
在代码中,当检测到键盘按下事件时,如果同时按下了 K_LEFT 和 K_UP 键,则判断为“向左上方移动”。但是,由于 event.key 只能获取当前按下的一个键位,因此无法同时检测到多个键位的状态。

解决办法是可以使用 pygame.key.get_pressed() 方法来获取当前所有键位的状态,并根据状态来判断是否同时按下了两个键位。具体实现方式可以参考以下代码:

keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and keys[pygame.K_UP]:
    print("left up")
elif keys[pygame.K_RIGHT]:
    print("right")
elif keys[pygame.K_UP]:
    print("up")
elif keys[pygame.K_DOWN]:
    print("down")

②按下无意义键位的问题
在原始代码中,只对一些特定键位进行了处理,如果按下其他键位则不会有任何响应。这可能会导致程序出现异常或停止运行。

解决办法是在键盘按下事件的外层添加一个判断语句,判断当前按下的键位是否在程序支持的键位范围内。如果不在范围内,则跳过该事件并不作出任何响应。具体实现方式可以参考以下代码:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        sys.exit()
    elif event.type == pygame.KEYDOWN:
        if event.key not in [pygame.K_LEFT, pygame.K_RIGHT, pygame.K_UP, pygame.K_DOWN]:
            continue
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] and keys[pygame.K_UP]:
            print("left up")
        elif keys[pygame.K_RIGHT]:
            print("right")
        elif keys[pygame.K_UP]:
            print("up")
        elif keys[pygame.K_DOWN]:
            print("down")

pygame.display.update()

这样做可以确保程序正常运行,并且只对支持的键位作出响应。