我是pygame的新手,我打了第一个我无法找到答案的树桩。
在blitting文本后,然后更改同一个变量的字符串,游戏而不是用新的替换原始文本,重叠两个文本..?
答案 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))