如何在Pygame Menu的角色选择器中添加对应角色图片?
pygame_menu的Selector组件默认不支持直接在选项下方显示对应图片,你可以通过自定义角色选择按钮组的方式来实现需求,每个按钮同时展示角色名称和图片,并处理选中状态。
修改后的完整代码示例
import pygame import pygame_menu from pygame_menu import themes # 全局变量 skin_h = 'images\чп.png' selected_character_id = 1 # 默认选中第一个角色 def set_hero(character_id): global skin_h, selected_character_id selected_character_id = character_id # 根据角色ID设置对应的皮肤路径 if character_id == 1: skin_h = 'images\чп.png' elif character_id == 2: skin_h = 'images\iron man.png' elif character_id == 3: skin_h = 'images\A usa man.png' elif character_id == 4: skin_h = 'images\dead pool.png' print(f"选中角色ID: {character_id}, 皮肤路径: {skin_h}") def character_menu(): global selected_character_id skins_h = pygame_menu.Menu('Select a Character', 700, 700, theme=themes.THEME_BLUE) # 整理角色数据:(名称, ID, 图片路径) characters = [ ('Spider man', 1, 'images\чп.png'), ('Iron man', 2, 'images\iron man.png'), ('Captain America', 3, 'images\A usa man.png'), ('Dead Pool', 4, 'images\dead pool.png') ] # 遍历角色数据,创建带图片和文字的选择按钮 for name, char_id, img_path in characters: # 加载并缩放图片(根据菜单尺寸调整大小) img = pygame.image.load(img_path) img = pygame.transform.scale(img, (100, 100)) # 调整图片大小 # 创建自定义按钮回调,绑定当前角色ID def create_button_callback(cid): return lambda: set_hero(cid) # 添加角色名称按钮 button = skins_h.add.button( title=name, action=create_button_callback(char_id), font_size=20 ) # 计算图片显示位置:按钮下方居中 btn_rect = button.get_rect() img_rect = img.get_rect(center=(btn_rect.centerx, btn_rect.bottom + 60)) # 定义图片绘制回调,在菜单更新时渲染图片和选中边框 def draw_image(surface): surface.blit(img, img_rect) # 为选中角色添加黄色高亮边框 if selected_character_id == char_id: pygame.draw.rect(surface, (255, 255, 0), img_rect.inflate(10, 10), 3) skins_h.add.draw_callback(draw_image) skins_h.add.button('Back', pygame_menu.events.BACK) skins_h.mainloop(surface) def start_the_game(): print(f"开始游戏,使用角色皮肤: {skin_h}") # 这里编写你的游戏启动逻辑 # 初始化pygame pygame.init() surface = pygame.display.set_mode((700, 700)) mainmenu = pygame_menu.Menu('Welcome', 700, 700, theme=themes.THEME_SOLARIZED) mainmenu.add.button('Choose your character', character_menu) mainmenu.add.button('Play', start_the_game) mainmenu.mainloop(surface)
关键修改说明
- 角色数据整合:把角色名称、ID、图片路径整理成统一列表,便于批量创建选择项。
- 图片与按钮绑定:加载并缩放角色图片,通过菜单的
draw_callback在对应按钮下方绘制图片。 - 选中状态可视化:新增
selected_character_id变量跟踪选中角色,为选中项添加高亮边框,提升交互直观性。
内容的提问来源于stack exchange,提问作者Hey
相关产品推荐
相关产品推荐

