为什么已在pygame中执行blit操作的文本无法正常显示?
Pygame文本不显示问题修复方案
问题根源
- 文本绘制时机错误:代码在进入主事件循环前仅执行了一次文本绘制操作,主循环启动后会持续绘制覆盖全屏的图片,直接将提前绘制的文本完全覆盖,因此无法观察到文本内容
- 额外注意:代码中使用的
time.sleep()会阻塞pygame事件队列处理,长时间阻塞容易触发系统判定程序无响应,若追求更好的运行效果可替换为pygame内置的时钟帧率控制方案
修复后代码
import pygame import time pygame.init() screen = pygame.display.set_mode((800, 600)) image1 = pygame.image.load('frog.gif') image2 = pygame.image.load('frog.jpg') pygame.display.set_caption('\'Dancing frog\'') image1 = pygame.transform.scale(image1, (800, 800)) image2 = pygame.transform.scale(image2, (800, 800)) font = pygame.font.SysFont('Calibri', 25, True, False) text = font.render('this should appear', True, (255, 255, 255)) run = True while run: # 绘制第一张图片后叠加文本 screen.blit(image1, (0, -200)) screen.blit(text, [10, 10]) pygame.display.update() time.sleep(0.2) # 绘制第二张图片后叠加文本 screen.blit(image2, (0, -200)) screen.blit(text, [10, 10]) pygame.display.update() time.sleep(0.2) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False pygame.quit()
核心修改逻辑
Pygame的屏幕绘制遵循后绘制的内容层级更高的规则,因此所有需要显示在上层的元素,都要放在底层元素绘制完成后、屏幕刷新前执行绘制操作。文本属于上层元素,因此需要每次绘制完图片后都重新绘制一次文本,保证不会被新绘制的图片覆盖。
内容的提问来源于stack exchange,提问作者ineedhelp
相关产品推荐
相关产品推荐

