pygame 在菜单之间切换导致崩溃:"video system not initializated"
pygame switching between menu causes crash: "video system not initializated"
我是 pygame 的新手,我正在尝试为我的游戏制作菜单。现在,我想要两个不同的屏幕,一个显示在菜单中,另一个显示在游戏的 "custom" 部分。我试图创建一个主循环和两个内部循环,它们只在应该的时候 运行。
目前,菜单和自定义之间的转换是通过按键 "d" 完成的。自定义菜单的过渡完美完成,但是自定义菜单的过渡使游戏崩溃
这是主循环:
while running:
while menu:
pygame.display.flip()
screen.blit(bg, (0, 0))
for event in pygame.event.get():
if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
running = 0
menu = 0
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_d):
custom = 1
menu = 0
while custom:
pygame.display.flip()
screen.blit(bgCustom, (0, 0))
for event in pygame.event.get():
if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
running = 0
custom = 0
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_d):
custom = 0
menu = 1
pygame.quit()
我在 "while custom" 并按 "d" 返回菜单时遇到的错误是 "pygame.error: video system not initializated"。两者的逻辑似乎相同,所以我很困惑。另外,我已经使用 pygame.init() 初始化了 pygame,所以这不是这里的问题。有什么想法吗?
提前致谢!
编辑:正如 Rabbid76 所说,在他的回答中,错误是我在 "pygame.quit()" 中的身份。它停止了我的视频系统。唯一的问题是最后一行。正确的循环如下:
while running:
while menu:
pygame.display.flip()
screen.blit(bg, (0, 0))
for event in pygame.event.get():
if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
running = 0
menu = 0
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_d):
custom = 1
menu = 0
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_1):
playMusic(1)
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_2):
playMusic(2)
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_0):
playMusic(0)
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_3):
playMusic(3)
while custom:
pygame.display.flip()
screen.blit(bgCustom, (0, 0))
for event in pygame.event.get():
if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
running = 0
custom = 0
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_d):
custom = 0
menu = 1
pygame.quit()
这是 Indentation. The last statement in the while
loop is pygame.quit()
. pygame.quit()
取消初始化所有 pygame 模块的问题。
循环后调用 pygame.quit()
。而不是在循环中:
while running:
while menu:
# [...]
while custom:
# [...]
#<--| INDENTATION
pygame.quit()
我是 pygame 的新手,我正在尝试为我的游戏制作菜单。现在,我想要两个不同的屏幕,一个显示在菜单中,另一个显示在游戏的 "custom" 部分。我试图创建一个主循环和两个内部循环,它们只在应该的时候 运行。
目前,菜单和自定义之间的转换是通过按键 "d" 完成的。自定义菜单的过渡完美完成,但是自定义菜单的过渡使游戏崩溃
这是主循环:
while running:
while menu:
pygame.display.flip()
screen.blit(bg, (0, 0))
for event in pygame.event.get():
if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
running = 0
menu = 0
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_d):
custom = 1
menu = 0
while custom:
pygame.display.flip()
screen.blit(bgCustom, (0, 0))
for event in pygame.event.get():
if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
running = 0
custom = 0
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_d):
custom = 0
menu = 1
pygame.quit()
我在 "while custom" 并按 "d" 返回菜单时遇到的错误是 "pygame.error: video system not initializated"。两者的逻辑似乎相同,所以我很困惑。另外,我已经使用 pygame.init() 初始化了 pygame,所以这不是这里的问题。有什么想法吗?
提前致谢!
编辑:正如 Rabbid76 所说,在他的回答中,错误是我在 "pygame.quit()" 中的身份。它停止了我的视频系统。唯一的问题是最后一行。正确的循环如下:
while running:
while menu:
pygame.display.flip()
screen.blit(bg, (0, 0))
for event in pygame.event.get():
if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
running = 0
menu = 0
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_d):
custom = 1
menu = 0
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_1):
playMusic(1)
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_2):
playMusic(2)
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_0):
playMusic(0)
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_3):
playMusic(3)
while custom:
pygame.display.flip()
screen.blit(bgCustom, (0, 0))
for event in pygame.event.get():
if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
running = 0
custom = 0
elif (event.type == pygame.KEYDOWN and event.key == pygame.K_d):
custom = 0
menu = 1
pygame.quit()
这是 Indentation. The last statement in the while
loop is pygame.quit()
. pygame.quit()
取消初始化所有 pygame 模块的问题。
循环后调用 pygame.quit()
。而不是在循环中:
while running:
while menu:
# [...]
while custom:
# [...]
#<--| INDENTATION
pygame.quit()