不三不四୭ 2025-02-05 11:10 采纳率: 100%
浏览 5
已结题

pygame当中的条件语句问题


 while True:
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        mainwindows()
                    elif event.type == KEYDOWN:
                        if event.key == K_b:
                            buy_start = True
                        elif event.key == K_RETURN:
                            buy_start = False



                if buy_start:# 如果需要显示商店页面
                    pygame.draw.rect(DISPLAYSURF, BLACK,
                                     (info_page_pos[0], info_page_pos[1], info_page_width, info_page_height))

这样按return按键为什么无法实现撤销对商店页面的显示,已经试过了将buy_start = False换成

pygame.quit()
            sys.exit()

能够说明回车键本身是没问题的

  • 写回答

3条回答 默认 最新

  • GISer Liu 2025-02-05 16:55
    关注

    该回答引用自GPT-deepseek, 由博主 GISer Liu 编写:

    问题分析

    用户在Pygame中实现了一个简单的商店页面显示逻辑。当按下B键时,buy_start变量被设置为True,从而触发商店页面的显示。当按下Return键时,buy_start被设置为False,期望撤销商店页面的显示。然而,用户发现按下Return键后,商店页面并没有被撤销。

    关键问题定位

    1. 事件处理逻辑:用户的事件处理逻辑中,按下Return键确实将buy_start设置为False,但商店页面仍然显示。
    2. 页面绘制逻辑:商店页面的绘制逻辑在if buy_start:条件下执行,但即使buy_start变为False,页面仍然显示。

    解决方案

    问题的根本原因在于页面绘制逻辑。即使buy_start被设置为False,页面仍然会被绘制,因为绘制逻辑没有在buy_startFalse时清除页面。

    解决思路

    1. 清除页面:在buy_startFalse时,需要清除商店页面的显示。可以通过绘制背景色或其他内容来覆盖商店页面。
    2. 优化事件处理:确保事件处理逻辑正确,并且在buy_startFalse时,页面绘制逻辑能够正确响应。

    代码实现

    以下是修改后的代码:

    import pygame
    from pygame.locals import *
    
    # 初始化Pygame
    pygame.init()
    
    # 设置屏幕大小
    DISPLAYSURF = pygame.display.set_mode((800, 600))
    
    # 定义颜色
    BLACK = (0, 0, 0)
    WHITE = (255, 255, 255)
    
    # 定义商店页面的位置和大小
    info_page_pos = (100, 100)
    info_page_width = 600
    info_page_height = 400
    
    # 初始化buy_start变量
    buy_start = False
    
    # 主循环
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == KEYDOWN:
                if event.key == K_b:
                    buy_start = True
                elif event.key == K_RETURN:
                    buy_start = False
    
        # 清除屏幕
        DISPLAYSURF.fill(WHITE)
    
        # 如果需要显示商店页面
        if buy_start:
            pygame.draw.rect(DISPLAYSURF, BLACK,
                             (info_page_pos[0], info_page_pos[1], info_page_width, info_page_height))
    
        # 更新屏幕显示
        pygame.display.update()
    

    代码解释

    1. 清除屏幕:在每次循环开始时,使用DISPLAYSURF.fill(WHITE)清除屏幕内容。这样当buy_startFalse时,商店页面会被清除。
    2. 页面绘制:只有在buy_startTrue时,才会绘制商店页面。
    3. 事件处理:按下B键时,buy_start设置为True,按下Return键时,buy_start设置为False

    总结

    通过上述修改,按下Return键后,商店页面会被清除,从而实现了撤销显示的效果。关键在于确保在buy_startFalse时,页面内容被正确清除。


    希望这个解决方案能够帮助你解决问题!如果有其他问题,欢迎继续提问。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

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

报告相同问题?

问题事件

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