• pygame退出时卡死


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 2301_80425213 2024-04-12 18:19 采纳率: 0% 浏览 1 首页/ 编程语言 / pygame退出时卡死 pythonpygame 你好,我想问一下关于您《pygame交换式拼图设计》的最后一串代码我运行代码且拼图成功后点击游戏界面的×(退出按钮)时程序总是没有响应,过一会就会卡死要我选择结束程序怎么办 successFlag = False while True: # 游戏主循环 for event in pygame.event.get(): if event.type == QUIT: exit() # 接收到退出事件后退出程序 elif event.type == MOUSEBUTTONDOWN: for cell in PictureList: # 检测按键按下,并且交换图片位置 if cell.isPressed(PictureList): break for partPicture in PictureList: partPicture.render(screen) if not successFlag: # # Sta 绘制分割线 for i in range(1, COL): pygame.draw.lines(screen, GREEN, 0, [(i * SCREEN_WIDTH // COL, 0), (i * SCREEN_WIDTH // COL, SCREEN_HEIGHT)], 1) for i in range(1, ROW): pygame.draw.lines(screen, GREEN, 0, [(0, i * SCREEN_HEIGHT // ROW), (SCREEN_WIDTH, i * SCREEN_HEIGHT // ROW)], 1) # End 绘制分割线 pygame.display.update() # 刷新一下画面 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    5条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-12 18:24
      关注

      引自免费微信小程序:皆我百晓生

      在你的代码中,当接收到QUIT事件时,你应该使用pygame.quit()来正确地关闭Pygame库,而不是直接调用exit()函数。exit()会立即终止整个Python解释器,包括Pygame可能还在后台运行的任何资源。这可能会导致资源未被释放,从而造成程序卡死。请尝试将exit()替换为pygame.quit(),这样应该可以解决卡死的问题。

      下面是修改后的代码段:

      successFlag = False
      
      while True:  # 游戏主循环
          for event in pygame.event.get():
              if event.type == QUIT:
                  pygame.quit()  # 使用pygame.quit()来正确关闭Pygame
                  sys.exit()  # 结束Python进程
              elif event.type == MOUSEBUTTONDOWN:
                  for cell in PictureList:
                      # 检测按键按下,并且交换图片位置
                      if cell.isPressed(PictureList):
                          break
          for partPicture in PictureList:
              partPicture.render(screen)
          if not successFlag:
              # # Sta 绘制分割线
              for i in range(1, COL):
                  pygame.draw.lines(screen, GREEN, 0, [(i * SCREEN_WIDTH // COL, 0), (i * SCREEN_WIDTH // COL, SCREEN_HEIGHT)], 1)
              for i in range(1, ROW):
                  pygame.draw.lines(screen, GREEN, 0, [(0, i * SCREEN_HEIGHT // ROW), (SCREEN_WIDTH, i * SCREEN_HEIGHT // ROW)], 1)
              # End 绘制分割线
          pygame.display.update()  # 刷新一下画面
      

      确保你已经导入了sys模块,如果没有,请在代码顶部添加import sys。这个改动应该能让你的游戏在点击退出按钮后正常关闭,而不会卡死。如果你还有其他问题,欢迎继续提问。

      展开全部

      评论 编辑记录
    • GISer Liu 2024-04-12 18:36
      关注

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

      根据你的描述,程序在点击退出按钮后没有响应,而是卡死了,需要手动结束程序。这个问题可能是由于游戏循环中没有正确处理退出事件导致的。下面是我对你的代码进行分析和修改建议:

      1. 在游戏主循环中,你应该将退出事件处理放在外层的for循环中,而不是在内层的事件循环中。这样可以确保及时响应退出事件。
      2. 另外,你可以在处理退出事件时,通过调用pygame.quit()来安全地退出pygame,并使用sys.exit()结束程序。
      3. 最后,为了保持代码的结构清晰,你可以将游戏退出事件的处理单独提取出来,以增强可读性。
        下面是修改后的代码:
        pythonCopy code
        import pygame
        from pygame.locals import *
        import sys
        # 初始化pygame
        pygame.init()
        # 定义常量
        SCREEN_WIDTH = 400
        SCREEN_HEIGHT = 400
        ROW = 3
        COL = 3
        GREEN = (0, 255, 0)
        # 定义退出游戏函数
        def quit_game():
        pygame.quit()
        sys.exit()
        # 根据你的代码逻辑,我假设PictureList是你存放拼图图片的列表
        PictureList = []
        # 定义一个变量来标志拼图是否成功
        successFlag = False  
        # 游戏主循环
        while True:
        # 处理事件
        for event in pygame.event.get():
        if event.type == QUIT:
        quit_game()  # 接收到退出事件后退出程序
        elif event.type == MOUSEBUTTONDOWN:
        for cell in PictureList:
        if cell.isPressed(PictureList):
        break
        # 绘制游戏界面
        for partPicture in PictureList:
        partPicture.render(screen)
        # 绘制分割线
        if not successFlag:
        for i in range(1, COL):
        pygame.draw.lines(screen, GREEN, 0, [(i * SCREEN_WIDTH // COL, 0), (i * SCREEN_WIDTH // COL, SCREEN_HEIGHT)], 1)
        for i in range(1, ROW):
        pygame.draw.lines(screen, GREEN, 0, [(0, i * SCREEN_HEIGHT // ROW), (SCREEN_WIDTH, i * SCREEN_HEIGHT // ROW)], 1)
        pygame.display.update()  # 刷新一下画面
        
        以上修改应该能够解决你遇到的卡死问题,点击退出按钮后程序应该能够正常退出。

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

      展开全部

      评论
    • 专家-百锦再 全栈领域优质创作者 2024-04-12 19:28
      关注

      对于您提到的问题,程序没有响应并且会卡死,这可能是由于程序在主循环中没有正确处理退出事件导致的。在您的代码中,可以尝试添加一个判断条件来处理退出事件,例如:

      for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()

      这样在接收到退出事件时,程序会正确地退出并释放资源,避免卡死情况的发生。

      另外,您的代码中似乎缺少成功拼图的标志处理,建议在成功拼图后将successFlag设为True,然后在主循环中添加判断条件,根据successFlag的值来执行相应的逻辑。

      希望以上建议对解决您的问题有所帮助。如果您有其他问题或疑问,请随时追问。谢谢!


      有问题你别着急,评论留言都可以,看到马上就回复,尽量及时补充齐
      评论
    • CSDN-Ada助手 CSDN-AI 官方账号 2024-04-12 23:37
      关注

      【相关推荐】




      如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

      展开全部

      评论
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-16 12:47
      关注

      中午好🌞🌞🌞
      本答案参考ChatGPT-3.5

      可能是因为您没有在程序内部确切指定pygame.quit()的方式,或者还存在其他问题。以下是可能的解决方案:

      1. 在退出循环前使用pygame.quit()来正确关闭程序。

      2. 尝试使用sys.exit()来代替exit(),因为exit()容易被卡死。

      3. 在Pygame 窗口被销毁之后将 Pygame 库中的所有模块都卸载,也可以解决此类问题。通过调用 pygame.quit()和sys.exit()函数来实现。

      可能修改后的代码如下:

      successFlag = False

      while True: # 游戏主循环 for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() elif event.type == MOUSEBUTTONDOWN: for cell in PictureList: # 检测按键按下,并且交换图片位置 if cell.isPressed(PictureList): break for partPicture in PictureList: partPicture.render(screen) if not successFlag: # # Sta 绘制分割线 for i in range(1, COL): pygame.draw.lines(screen, GREEN, 0, [(i * SCREEN_WIDTH // COL, 0), (i * SCREEN_WIDTH // COL, SCREEN_HEIGHT)], 1) for i in range(1, ROW): pygame.draw.lines(screen, GREEN, 0, [(0, i * SCREEN_HEIGHT // ROW), (SCREEN_WIDTH, i * SCREEN_HEIGHT // ROW)], 1) # End 绘制分割线 pygame.display.update() # 刷新一下画面

      注意,这里在接收QUIT事件后,先使用pygame.quit()来停止所有Pygame模块,再使用sys.exit()来终止程序。这样做可以确保程序正常退出,并释放所有资源。

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    【Java基础】四张图轻松拿捏Java VisualVM添加Visual GC插件实现JVM性能调优
    Veritas Backup Exec v22.2.1193.1605 数据备份恢复软件
    “世界首台USB-C iPhone”被拍卖,目前出价63万人民币
    I Pa?sWorD(2023icpc网络预选赛)
    Fastjson反序列化漏洞
    Oracle连接和使用
    干货!一次伪静态页面的SQL注入!白帽黑客实战 。
    介孔二氧化硅包裹超顺磁性Fe3O4纳米颗粒表面氨基修饰|齐岳生物
    企业经营欺诈评分模型的开发与划定
    使用Fiddler劫持网络资源为前端开发助力(示例:Dynamic CRM 表单开发 也能热更新? )
  • 原文地址:https://ask.csdn.net/questions/8087507