如何删除带有背景的pygame上的文本,而不是一次又一次地放置背景?

时间:2017-09-01 13:41:12

标签: python text pygame render

我有这个:

screen = pygame.display.set_mode((WIDTH, HEIGHT))
background_image = load_image('images/fondo.jpg') # previous declared function
FONT = pygame.font.Font(None, 30)
text = FONT.render('Test', 1, (255, 255, 255))
a = screen.blit(text, (150,400))

我想要的就是删除渲染而不删除de background(我使用填充,它似乎只能用于颜色,而不是图像)

我如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

要有效地删除文本,您必须使用其他内容对其进行blit。所以,如果你做了类似的事情:

screen.blit(background_image,(0,0))

当您想要删除文本时,屏幕看起来就像文本从未存在过一样。它还将摆脱屏幕上的任何其他内容,因此您将不得不再次重新制作所需的效果。

答案 1 :(得分:0)

我在研究如何针对自己的程序干净地执行此操作时遇到了这篇文章。我发现似乎没有考虑所有可能的情况。回来发表我发现的作品得出的最终结果。基本概念是用下面的内容覆盖(覆盖)文本。或者更准确地说,是在抄录文字之前进行任何操作。

blitsurface方法的文档显示其签名为blit(source, dest, area=None, special_flags = 0) -> Rectdest参数是一个坐标,但也会使用rect的左上角。要从表面擦除文本,可以使用该可选的区域参数(rect)。从示例代码开始,通用的解决方案是:

screen = pygame.display.set_mode((WIDTH, HEIGHT))
background_image = load_image('images/fondo.jpg') # previous declared function
FONT = pygame.font.Font(None, 30)
text = FONT.render('Test', 1, (255, 255, 255))
snapshot = screen.copy()  # take a copy without the text
a = screen.blit(text, (150,400))
pygame.display.update()  # show the screen at this state
do_stuff()
screen.blit(snapshot, a, a)  # Restore just the text area
pygame.display.update()  # show the screen without the text

只要do_stuff()中的任何内容都不能修改放置文本的a矩形内的屏幕,那该方法就始终有效。

假设background_image是在screen处被渗色到(0, 0)的表面,并且它覆盖了a矩形的整个区域,即sceen.copy()可以省略,还原变为 screen.blit(background_image, a, a)。如果将background_image设置为(DX, DY),则将其更改为screen.blit(background_image, a, a.move(-DX, -DY))以补偿偏移量。