Pygame调用pygame.display.update()后H键无法绘制帮助界面问题
问题根因
- 按下H键绘制完帮助界面后没有调用
pygame.display.update()刷新屏幕,绘制的内容只存在于显存不会显示到窗口上 - 帮助界面绘制完成后没有驻留逻辑,mainMenu函数执行完后外层循环立刻重新调用mainMenu,主菜单内容直接覆盖了刚画好的帮助界面
- 缺少帮助界面下按B返回主菜单的交互逻辑
修复方案
直接替换你原来的mainMenu函数为下面的代码即可:
def mainMenu(): # 新增状态标记,判断当前是否在帮助页面 in_help = False while True: screen.fill(bgcolor) if not in_help: # 显示主菜单 menu = "[ (S) T A R T ]\n [ (H) E L P ]\n [ (Q) U I T ]\n jeg er best" drawMenu(menu, 140, 120, 80) else: # 显示帮助界面 drawHelp(25, 70, 40) # 统一处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if not in_help: # 主菜单下的按键逻辑 if event.key == pygame.K_q: pygame.quit() sys.exit() elif event.key == pygame.K_s: game() elif event.key == pygame.K_h: in_help = True else: # 帮助界面下的按键逻辑 if event.key == pygame.K_b: in_help = False # 每次绘制完统一刷新屏幕 pygame.display.update() # 控制菜单界面帧率,避免占用过高CPU clock.tick(30)
另外你代码最末尾的外层循环可以简化,修改后的mainMenu已经自带了无限循环,把末尾的:
while True: mainMenu()
替换为:
mainMenu()
即可避免重复调用的问题。
内容的提问来源于stack exchange,提问作者spoof
相关产品推荐
相关产品推荐

