不三不四୭ 2025-02-04 23:49 采纳率: 100%
浏览 6
已结题

关于#pygame#的问题,请各位专家解答!

 while True:
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        mainwindows()
                    elif event.type == pygame.KEYDOWN:
                        # 获取当前所有按键的状态
                        keys = pygame.key.get_pressed()
                        # 检测 Shift 键是否被按下
                        if keys[pygame.K_LSHIFT] or keys[pygame.K_RSHIFT]:
                            # 绘制矩形框
                            pygame.draw.rect(DISPLAYSURF, BLACK,
                                             (info_page_pos[0], info_page_pos[1], info_page_width, info_page_height))

这个不只是shift,所有的按键交互都无法进行,但是没有报错

for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        mainwindows()

部分是一个递归(前一部分省略了)能回到原来的界面
这一部分是正常的,我的问题在按键交互的判断条件上还是执行语句上?该怎么改

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2025-02-04 23:56
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    从你的描述来看,问题出在按键事件的处理逻辑上。具体来说,pygame.key.get_pressed() 是一个连续检测按键状态的方法,而 pygame.event.get() 是获取事件队列中的事件。你当前的代码中,pygame.key.get_pressed() 被放置在 pygame.event.get() 的循环内部,这会导致按键状态在每次事件循环中都重新获取。

    另外,你在检测到 pygame.KEYDOWN 事件时,绘制了一个矩形,但这个矩形只会在一次按键操作中绘制,而不是持续绘制。

    下面是修正后的代码示例:

    import pygame
    
    # 初始化 Pygame
    pygame.init()
    
    # 设置显示窗口
    DISPLAYSURF = pygame.display.set_mode((800, 600))
    pygame.display.set_caption('Key Interaction Example')
    
    # 定义颜色
    BLACK = (0, 0, 0)
    
    # 定义信息页面的位置和尺寸
    info_page_pos = (100, 100)
    info_page_width = 200
    info_page_height = 200
    
    # 初始状态下不绘制矩形
    draw_rectangle = False
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                mainwindows()  # 假设 mainwindows() 是一个退出函数
            elif event.type == pygame.KEYDOWN:
                # 检查是否按下了 Shift 键
                if event.key == pygame.K_LSHIFT or event.key == pygame.K_RSHIFT:
                    draw_rectangle = True
                else:
                    # 处理其他键的逻辑
                    print(f"Key pressed: {event.key}")
    
        # 根据 draw_rectangle 的值决定是否绘制矩形
        if draw_rectangle:
            pygame.draw.rect(DISPLAYSURF, BLACK, 
                             (info_page_pos[0], info_page_pos[1], info_page_width, info_page_height))
    
        # 更新显示
        pygame.display.update()
    

    解决方案步骤:

    1. 移除 pygame.key.get_pressed():将其从 pygame.event.get() 循环内部移除。
    2. 检查 KEYDOWN 事件:在 KEYDOWN 事件中,检查是否按下了 Shift 键。
    3. 设置标志位:使用一个布尔变量 draw_rectangle 来控制是否绘制矩形。
    4. 绘制矩形:在主循环中根据 draw_rectangle 的值来决定是否绘制矩形。
    5. 更新显示:确保每次循环结束后调用 pygame.display.update() 更新显示内容。

    这样修改后,程序会根据按键事件来绘制矩形,并且不会出现所有的按键交互无法进行的情况。

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

报告相同问题?

问题事件

  • 系统已结题 2月13日
  • 已采纳回答 2月5日
  • 创建了问题 2月4日