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

如何在Pygame中让文本绘制在背景上层不被遮挡

问题原因

Pygame的blit操作遵循「后绘制的内容覆盖先绘制的内容」的规则,当前写法存在两个核心问题:

  1. 绘制顺序错误:在事件处理阶段绘制文本,之后才绘制背景,相当于背景直接覆盖了刚画好的文本
  2. 文本绘制时机错误:只在write_text_0_event触发的那一瞬间绘制文本,其余帧绘制完背景后没有重绘文本,文本只会存在一帧就被后续帧的背景覆盖

解决方法

调整主循环的绘制逻辑,严格按照「底层元素→顶层元素」的顺序绘制,且文本需要每一帧都重绘,不能仅在事件触发时绘制:

# 提前初始化全局变量存储当前已打印的文本
current_text_0 = ""
index_0 = 0

while running:
    # 第一步:处理所有事件,仅更新文本内容,不做绘制操作
    for event in pygame.event.get():
        # 其他事件处理逻辑...
        elif event.type == write_text_0_event:
            if index_0 <= len(msg0) - 1:
                current_text_0 += msg0[index_0]
                index_0 += 1
    
    # 第二步:先绘制背景(底层元素)
    screen.blit(city_bg, (0, 0))
    
    # 第三步:绘制文本(顶层元素,放在背景绘制之后)
    text = font.render(current_text_0, True, (255, 255, 255))
    screen.blit(text, (100, 100))
    
    # 第四步:刷新屏幕,不要遗漏该步骤
    pygame.display.flip()

调整后事件处理阶段仅负责更新文本内容,每一帧都会先画背景,再把最新的文本画在背景上层,既保证了层级正确,也不会因为没有触发打印事件就消失。

内容的提问来源于stack exchange,提问作者Alan Bagel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 05:54:03