2301_77164853 2023-04-17 15:23 采纳率: 100%
浏览 13
已结题

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()


  • 写回答

2条回答 默认 最新

  • 努力の小熊 2023-04-17 15:30
    关注

    努力の小熊参考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()
    

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月26日
  • 已采纳回答 4月18日
  • 创建了问题 4月17日