如何关联两个Pygame-menu菜单 实现跳转关卡选择及返回功能
你只需要合并两个菜单的重复初始化逻辑,通过pygame-menu内置的菜单层级功能即可实现跳转,不需要分开运行两个文件,合并后的可运行完整代码如下:
import pygame import pygame_menu from pygame import mixer # 公共初始化仅执行一次,避免重复加载资源 pygame.init() surface = pygame.display.set_mode((600, 400)) pygame.display.set_caption("Projecte MatZanfe") # 加载窗口图标,确保calculator.png在脚本同级目录 logotip = pygame.image.load("calculator.png") pygame.display.set_icon(logotip) # 全局字体定义 font = pygame_menu.font.FONT_8BIT font1 = pygame_menu.font.FONT_NEVIS font2 = pygame_menu.font.FONT_BEBAS # 先定义关卡选择菜单 selector_menu = pygame_menu.Menu('Selecció dels mòduls', 600, 400, theme=pygame_menu.themes.THEME_SOLARIZED) selector_menu.add.button('Sums', font_name=font2, font_color='green') selector_menu.add.button('Subtracts', font_name=font2, font_color='blue') selector_menu.add.button('Multiplications', font_name=font2, font_color='red') selector_menu.add.button('Divisions', font_name=font2, font_color='purple') # Back按钮自定义回调:停止背景音乐后返回上一级菜单 def back_to_start(): mixer.music.stop() selector_menu._back() selector_menu.add.button("Back", back_to_start, font_name=font1, font_color='black') # 再定义启动菜单 start_menu = pygame_menu.Menu('Projecte MatZanfe', 600, 400, theme=pygame_menu.themes.THEME_SOLARIZED) user_input = start_menu.add.text_input('User: ', font_name=font1, font_color='blue') age_input = start_menu.add.text_input('Age: ', font_name=font1, font_color='Black') # Start按钮自定义回调:播放背景音乐+打开关卡选择菜单 def open_selector(): # 确保LevelSelector.wav在脚本同级目录 mixer.music.load('LevelSelector.wav') mixer.music.play(-1) # 如需使用用户输入的信息,可在这里获取: # username = user_input.get_value() # age = age_input.get_value() start_menu._open(selector_menu) start_menu.add.button('Start', open_selector, font_name=font, font_color='green') start_menu.add.button('Exit', pygame_menu.events.EXIT, font_name=font, font_color='red') # 仅运行一次启动菜单的主循环即可 start_menu.mainloop(surface)
核心实现逻辑
- 移除了两份代码里重复的pygame初始化、窗口创建逻辑,所有公共资源仅加载一次
- 两个菜单分别命名为
start_menu和selector_menu避免变量冲突,通过pygame-menu内置的层级管理实现跳转 - 启动菜单的Start按钮绑定打开关卡选择菜单的动作,关卡菜单的Back按钮绑定返回上一级菜单的动作
- 背景音乐仅在进入关卡选择菜单时播放,返回启动菜单时自动停止,你也可以根据需求调整播放逻辑
内容的提问来源于stack exchange,提问作者Torchllama
相关产品推荐
相关产品推荐

