Pygame延迟执行绘制内容后瞬间消失的问题咨询
解决PyGame延迟显示内容后无法保持显示的问题
嗨,我明白你遇到的困扰了——用pygame.time.set_timer()触发事件绘制文本,但文本只闪一下就消失了对吧?这其实是主循环的逻辑导致的,我来给你捋清楚并修复它。
问题根源
你的主循环里每次都会执行screen.fill((0,0,0))清空整个屏幕,而USEREVENT只是在触发的那一帧调用了Other.show_heading()绘制文本。等到下一次循环,屏幕又被清空,却没有再次绘制文本,所以你只能看到文本闪一下就没了。
修复方案
我们需要一个状态变量来标记是否要显示文本,当定时器事件触发时,把这个状态设为True,之后每帧都根据这个状态来绘制文本,这样就能让内容持续显示了。
修改后的完整代码如下:
import pygame pygame.init() SCREEN_WIDTH = 800 SCREEN_HEIGHT = 600 screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) pygame.display.set_caption("Test Run") # Heading headingfont = pygame.font.Font('Bouncy-PERSONAL_USE_ONLY.otf', 45) headingX = 230 headingY = 10 class Other(): def show_heading(): Heading = headingfont.render("Health Run!", True, (255, 255, 255)) screen.blit(Heading, (headingX, headingY)) # 添加状态变量:标记是否显示标题 show_heading = False # 设置100ms后触发一次USEREVENT pygame.time.set_timer(pygame.USEREVENT, 100) running = True while running: screen.fill((0,0,0)) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.USEREVENT: show_heading = True # 如果只需要触发一次显示,取消定时器避免重复触发 pygame.time.set_timer(pygame.USEREVENT, 0) # 只要状态为True,每帧都绘制标题 if show_heading: Other.show_heading() pygame.display.update()
关键修改点
- 添加
show_heading布尔变量,作为是否显示文本的开关 - 触发
USEREVENT时仅切换状态变量,不再直接绘制文本 - 在主循环的绘制阶段,根据状态变量持续绘制文本
- 可选优化:如果只需要单次延迟显示,触发后调用
pygame.time.set_timer(pygame.USEREVENT, 0)取消定时器,避免重复触发
这样修改后,延迟100ms后文本就会一直显示在屏幕上,直到你关闭窗口啦!
内容的提问来源于stack exchange,提问作者Santa Claus
相关产品推荐
相关产品推荐

