Pygame开发游戏时标题界面按钮文字不显示该如何解决?
问题根因
核心问题是绘制顺序颠倒:先把文字渲染到屏幕上,紧接着又绘制了按钮矩形,不管是不是悬停状态,后绘制的矩形都会直接覆盖掉之前绘制的文字,所以看不到文字显示。
另外你只在初始化时执行了一次screen.fill(background_colour),没有放到主循环里每次重绘前清屏,后续画面刷新也容易出现残留异常。
修复后代码
import pygame pygame.init() background_colour = (33, 37, 49) screen = pygame.display.set_mode((1000, 600)) pygame.display.set_caption('A Game') game_font = pygame.font.Font('JetBrainsMono-Regular.ttf', 50) game_name = game_font.render('a game', True, (255, 255, 255)) game_name = pygame.transform.scale2x(game_name) game_name_rect = game_name.get_rect(center=(500, 300)) running = True title_screen = True while running: # 每次循环先清屏,避免画面残留 screen.fill(background_colour) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if title_screen: # 先绘制按钮底色,再绘制文字,保证文字在最上层 if game_name_rect.collidepoint(pygame.mouse.get_pos()): pygame.draw.rect(screen, (58, 64, 80), game_name_rect) else: pygame.draw.rect(screen, (38, 44, 60), game_name_rect) # 矩形绘制完成后再渲染文字 screen.blit(game_name, game_name_rect) pygame.display.update()
改动说明
- 把清屏操作
screen.fill(background_colour)移到主循环内部,每次刷新画面都先清空上一帧的内容 - 调整标题屏内的绘制顺序:先根据鼠标悬停状态绘制对应颜色的按钮矩形,最后再渲染文字,确保文字始终显示在按钮上层
- 简化了重复的碰撞判断逻辑,用if-else替代两次独立的if判断,避免冗余判断
内容的提问来源于stack exchange,提问作者RBM
相关产品推荐
相关产品推荐

