使用pygame开发游戏时添加文本出现闪烁问题如何解决?
故障原因
- 单次循环内执行了两次屏幕刷新,第一次刷新时仅文本被渲染到屏幕,紧接着你又绘制了背景、按钮、角色后二次刷新,文本刚显示就被背景覆盖,循环往复就形成了肉眼可见的闪烁。
- 绘制逻辑顺序错误:Pygame标准绘制流程是
先绘制背景/清屏 → 绘制所有上层元素(文本、按钮、角色等) → 最后统一刷新屏幕,你先绘制文本再刷新,之后才画背景,相当于文本直接被背景覆盖。 - 单次循环内两次调用
clock.tick()会导致帧率逻辑混乱,进一步加重闪烁问题。
修复方案
调整绘制顺序,删除重复的刷新和帧率控制语句,遵循Pygame标准循环逻辑即可,修改后代码如下:
def start_game(): fon1_demo = pygame.image.load('fon1remake2.png') fon1 = pygame.transform.scale(fon1_demo, (1920, 1080)) diktor_demo = pygame.image.load('diktor.png') diktor = pygame.transform.scale(diktor_demo, (950, 870)) playgame_btn = Button(70, 70) fonidet = True while fonidet: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() # 第一步:绘制底层背景 display.blit(fon1, (0, 0)) # 第二步:按从下到上的层级绘制所有上层元素 display.blit(diktor, (1150, 58)) playgame_btn.draw(80, 930, '>>>') print_text('Test.', 200, 900, font_color=(255, 255, 255), font_type='01.ttf', font_size = 30) print_text('Test!', 200, 950, font_color=(255, 255, 255), font_type='01.ttf', font_size=30) print_text('(Нажмите на ">>>" слева)', 200, 1000, font_color=(255, 255, 255), font_type='01.ttf', font_size=30) # 第三步:所有元素绘制完成后统一刷新屏幕 pygame.display.update() # 单次循环仅调用一次帧率控制,可按需设置帧率 clock.tick(60)
内容的提问来源于stack exchange,提问作者lobzinc
相关产品推荐
相关产品推荐

