11

我对 pygame 还很陌生,我遇到了我的第一个树桩,但我找​​不到答案。

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

4

3 回答 3

11

您必须先删除旧文本。创建的曲面Font.render是普通曲面。一旦 aSurface被 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))
于 2012-05-06T05:25:07.730 回答
2

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

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))
于 2015-05-20T10:34:00.547 回答
1

可以有其他解决方案,即使它不是很不同。上一个答案会擦除整个屏幕,但您可以只擦除文本。如果它写在图像上,您将只替换图像的一部分,方法是获取文本大小并对相应的图像部分进行 blitting(pygame.surface.subsurface 函数)。或者,如果不是,您可以只填充屏幕的一部分。在这种情况下,您只会删除文本。

于 2013-04-22T09:52:24.630 回答