我有这个:
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(我使用填充,它似乎只能用于颜色,而不是图像)
我如何解决这个问题?
答案 0 :(得分:0)
要有效地删除文本,您必须使用其他内容对其进行blit。所以,如果你做了类似的事情:
screen.blit(background_image,(0,0))
当您想要删除文本时,屏幕看起来就像文本从未存在过一样。它还将摆脱屏幕上的任何其他内容,因此您将不得不再次重新制作所需的效果。
答案 1 :(得分:0)
我在研究如何针对自己的程序干净地执行此操作时遇到了这篇文章。我发现似乎没有考虑所有可能的情况。回来发表我发现的作品得出的最终结果。基本概念是用下面的内容覆盖(覆盖)文本。或者更准确地说,是在抄录文字之前进行任何操作。
blit的surface方法的文档显示其签名为blit(source, dest, area=None, special_flags = 0) -> Rect
。 dest
参数是一个坐标,但也会使用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))
以补偿偏移量。