You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:06:04