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

如何在Pygame中分屏处理字体更新:左侧替换右侧叠加

实现左侧替换、右侧叠加的文本显示效果

我来帮你搞定这个需求!咱们先理清楚核心改动方向,再看具体代码:

核心思路

  • 右侧叠加显示:不能再用单个变量存储text4,得用一个列表来保存所有生成的文本表面,这样每次新增的内容都能保留下来,渲染时逐个绘制
  • 左侧替换更新:只需要维护一个存储当前最新文本的变量,每次更新直接覆盖旧的内容即可
  • 屏幕分区:以屏幕宽度中线(320像素)为界,左侧文本居中在左半屏,右侧文本居中在右半屏
  • 定时更新:每2秒自动触发内容更新,左侧替换为新文本,右侧将新文本加入叠加队列

修改后的完整代码

import pygame
import time
pygame.init()

screen = pygame.display.set_mode((640, 480))
clock = pygame.time.Clock()
done = False
font = pygame.font.SysFont("comicsansms", 72)

start = time.time()
F = 0
# 右侧用列表存储所有要叠加的文本
right_texts = []
# 左侧只存储当前最新的文本
left_current_text = None

while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True
        if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
            done = True
        # 保留回车触发更新的逻辑(可选,也可以完全依赖定时)
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_RETURN:
            F += 1
            new_text4 = font.render(str(F), True, (128, 128, 0))
            right_texts.append(new_text4)
            left_current_text = font.render(str(F), True, (0, 128, 0))

    # 每2秒自动更新一次
    passed_time = time.time() - start
    if passed_time > 2:
        start = time.time()
        F += 1
        # 右侧添加新文本到叠加列表
        new_text4 = font.render(str(F), True, (128, 128, 0))
        right_texts.append(new_text4)
        # 左侧替换为最新文本
        left_current_text = font.render(str(F), True, (0, 128, 0))

    # 填充背景(必须先填充,否则左侧旧文本不会消失)
    screen.fill((255, 255, 255))

    # 绘制左侧文本:只显示当前最新的
    if left_current_text is not None:
        # 左半屏居中计算:x取0-320的中点,减去文本宽度的一半
        left_x = 160 - left_current_text.get_width() // 2
        left_y = 240 - left_current_text.get_height() // 2
        screen.blit(left_current_text, (left_x, left_y))

    # 绘制右侧文本:遍历列表,逐个往下排列
    if right_texts:
        # 每个文本之间的间距
        line_spacing = 80
        # 起始y坐标,从顶部开始往下
        start_y = 40
        for idx, text_surface in enumerate(right_texts):
            # 右半屏居中计算:x取320-640的中点,减去文本宽度的一半
            right_x = 480 - text_surface.get_width() // 2
            right_y = start_y + idx * line_spacing
            screen.blit(text_surface, (right_x, right_y))

    pygame.display.flip()
    clock.tick(60)

关键改动说明

  1. 数据结构调整:

    • 把单个text4变量改成right_texts列表,每次新增文本都append进去,实现叠加存储
    • 左侧用left_current_text变量只存最新文本,每次更新直接覆盖
  2. 渲染逻辑调整:

    • 左侧每次只绘制当前的left_current_text,且每次循环先填充白色背景,这样旧文本会被覆盖,实现“替换”效果
    • 右侧遍历right_texts列表,按索引计算每个文本的y坐标,实现从上到下的叠加排列
  3. 位置计算优化:

    • 左半屏的中心x坐标是160(640/2 /2),右半屏的中心x坐标是480(640/2 + 640/2/2),确保文本在各自区域居中
    • 右侧文本用line_spacing控制行间距,避免重叠
  4. 定时逻辑保留:

    • 保留了每2秒自动更新的逻辑,同时也保留了回车触发更新的功能(如果不需要回车触发,可以删掉对应的KEYDOWN分支)

内容的提问来源于stack exchange,提问作者Derick Kolln

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:18:47