python - 如何在不使用 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
我知道这是一个具体问题,如果上述内容不清楚,我可以提供更多代码。希望我能得到答案。洗耳恭听。
解决方案
这是一个简单的解决方案:一旦退出 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
推荐阅读
- mongodb - 使用过滤器在graphql查询中保留顺序
- arrays - 雪花 JSON 解析在数组(列表)中没有“键”的情况下展平项目
- r - 为什么我构建的 R 函数会产生错误的输出?
- angular - 当我在 tomcat 中部署我的 Angular 应用程序时,它会在 url 中创建两个文件夹名称导致 404 错误
- javascript - 我正在使用 JavaScript 创建一个避免游戏的块
- javascript - 使用 TS 从本地存储中转换检索到的对象
- c - shell 将 args 发送到带有空格的 C 程序
- heroku - 如何使用 Heroku 安全地隐藏我的不和谐机器人 API 密钥?
- python - Github python gitignore,为什么忽略c扩展?有没有更好的方法在 Python 中使用 C?
- input - 尝试从另一个类获取输入并实现方法