Pygame主菜单选中start按回车后fade等函数无法运行问题排查
问题原因
fade函数中black_screen()被错误放在透明度循环内部,第一次循环执行时就会直接跳转,不会完成完整的渐隐动画。- 函数调用逻辑存在递归死循环:
main_menu()→fade()→black_screen()→game()→main_menu(),执行流直接跳回主菜单,视觉上表现为fade等函数未运行。 game()函数开头错误调用了main_menu(),导致进入游戏逻辑前就被强制切回主菜单。- 额外隐患1:
fade函数内的渐变表面变量名和函数名重名,会造成命名覆盖,可能引发未知异常。 - 额外隐患2:
black_screen函数仅创建了黑屏表面,没有将表面绘制到屏幕上就执行更新,黑屏效果根本不会生效。
修复代码
修正fade函数
将black_screen()调用移到循环外,同时修改变量名避免冲突:
def fade(): global width, height fade_surface = pygame.Surface((width,height)) fade_surface.fill((0,0,0)) for alpha in range(0, 300): fade_surface.set_alpha(alpha) screen.blit(fade_surface, (0,0)) pygame.display.update() pygame.time.delay(6) black_screen()
修正black_screen函数
补全绘制逻辑,可根据需求调整黑屏停留时长:
def black_screen(): blacc = pygame.Surface((width,height)) blacc.fill((0,0,0)) screen.blit(blacc, (0,0)) pygame.display.update() pygame.time.delay(1000) # 此处改为停留1秒,可自行调整 game()
修正game函数
删除开头的主菜单调用,可选增加帧率控制避免游戏运行过快:
def game(): run = True while run: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() screen.fill((0,255,0)) pygame.display.update() clock.tick(FPS)
内容的提问来源于stack exchange,提问作者sejungoamare
相关产品推荐
相关产品推荐

