如何删除/替换pygame中的文本

时间:2012-05-06 03:28:56

标签: text pygame blit

我是pygame的新手,我打了第一个我无法找到答案的树桩。

在blitting文本后,然后更改同一个变量的字符串,游戏而不是用新的替换原始文本,重叠两个文本..?

3 个答案:

答案 0 :(得分:7)

您必须先删除旧文本。由Font.render创建的曲面是普通曲面。一旦Surface为blit,其内容就会成为目标表面的一部分,您必须操纵目的地表面以清除源表面上的blit。

擦除目标表面的一种方法是将背景表面blit到它上面。背景表面是目标表面看起来的样子,没有任何文本或精灵。另一种方法是用纯色填充表面:

# pygame initialization goes here

screen = pygame.display.get_surface()
font = pygame.font.Font(None, 40)

font_surface = font.render("original", True, pygame.Color("white"));
screen.blit(surface, (0, 0))

screen.fill(pygame.Color("black")) # erases the entire screen surface
font_surface = font.render("edited", True, pygame.Color("white"));
screen.blit(surface, (0, 0))

答案 1 :(得分:1)

可以有另一种解决方案,即使它没有太大差异。 上一个答案会删除所有屏幕,但您可以只删除文本。 如果它写在图像上,您将只替换图像的一部分,通过获取文本大小并对相应的图像部分进行blitting(pygame.surface.subsurface函数)。 或者如果不是,您只需填写屏幕的一部分即可。 在这种情况下,您只需删除文字。

答案 2 :(得分:1)

您也可以覆盖您的文字 像这样:

label = myfont.render("Text", 0, (255,255,0))
screen.blit(label, (100, 100))
if x: //Parameter you check before overwrite
    label = myfont.render("Text", 0, BACKGROUND_COLOR)
    screen.blit(label, (100, 100))