如何在不使用quit()/ sys.exit()的情况下关闭pygame窗口,以免退出游戏之外的循环?

时间:2019-05-07 08:56:12

标签: pygame chat

我正在创建一个聊天系统,并希望插入使用Pygame制作的游戏。在聊天系统的state_machine文件中,我将客户端的状态设置为-d。当客户端在S_GAMING状态下键入“游戏”时,状态将更改为S_LOGGEDIN,并且当游戏结束时,用户可以通过单击“ x”按钮或通过以下方式退出游戏等待3秒。

在不退出聊天系统的情况下关闭游戏窗口有些麻烦。

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

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

quit()

这是chat_state_machine文件的一部分:

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()

我知道这是一个特定的问题,如果以上内容不清楚,我可以提供更多代码。 希望我能得到答案。我全是耳朵。

1 个答案:

答案 0 :(得分:1)

这是一个简单的解决方案:退出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