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日

悬赏问题

  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)