首页 > 解决方案 > 如何在不使用 quit()/sys.exit() 的情况下关闭 pygame 窗口,这样我就不会退出游戏外的循环?

问题描述

我正在创建一个聊天系统,并想插入一个用 Pygame 制作的游戏。在聊天系统的 state_machine 文件中,我将客户端的状态设置为S_GAMING. 当客户端在状态下键入“游戏”时S_LOGGEDIN,状态将变为S_GAMING,游戏结束后,用户可以通过点击“x”按钮或等待3秒退出游戏。

我在不退出聊天系统的情况下关闭游戏窗口时遇到了一些麻烦。

当我使用时pygame.quit(),窗口会冻结。当我尝试pygame.quit()and sys.exit()orquit()时,我也退出了聊天系统。

这是 game.py 文件的一部分:

run = True

gameOver = False

timer = 0

while run:

   clock.tick(27)   

   #check events
   for event in pygame.event.get():
       if event.type == pygame.QUIT:
           run = False

   if not gameOver:

       drawWindow()
       for each in barriers:
           if each.isHit:
               gameOver = True
   else:
       if timer < 81:
           win.blit(game_over,(0,0))
           timer +=1 
           pygame.display.update() 
       else:
           run = False

pygame.display.quit()

pygame.quit()

这是 chat_state_machine 文件的一部分:

elif self.state == S_GAMING:

    import game

    self.state = S_LOGGEDIN

我知道这是一个具体问题,如果上述内容不清楚,我可以提供更多代码。希望我能得到答案。洗耳恭听。

标签: pythonpygamechat

解决方案


这是一个简单的解决方案:一旦退出 pygame,代码应该抛出异常,在这种情况下,您可以将 run 切换为 False 并开始一个新循环

import pygame

pygame.init()
screen = pygame.display.set_mode((600, 400))
clock = pygame.time.Clock()
run = True

while run:
   try:
      screen.fill((0,0,0))

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

      clock.tick(120)
      pygame.display.update()
   except:
      run = False

while not run:
  #Your other code here
  pass

推荐阅读