Pygame 在背景上擦除图像
你把一张图片放到你的画布上,作为背景。然后你按下X按钮,把另一张图片放到同一个画布上,这时候你想把之前的那张图片擦掉,应该怎么做呢?我现在有了一些代码,但最后画布中间还是出现了一个白色的矩形。
screen = pygame.display.set_mode(1280, 512)
screen.blit(background, (0,0))
while True:
pygame.display.flip() #flip is same as update
for event in pygame.event.get():
if (event.type == pygame.KEYDOWN):
if event.key == pygame.K_SPACE:
screen.blit(player, (x, y))
if event.key == pygame.K_BACKSPACE:
pygame.draw.rect(screen, [255,255,255], (x, y, 62,62))
3 个回答
0
我个人使用的是
pygame.draw.rect(screen, (RgbColorHere), (x, y, width, height))
3
通常,blit工作流程就是把原始的背景画到屏幕上。
在你的代码中,你会用 screen.blit(background, (0,0))
这个命令。
当你开始组合很多不同的图层时,你可能需要一个变量或者一个变量的列表来记录屏幕的状态。
比如:
初始化背景
objectsonscreen = []
objectsonscreen.append(background)
screen.blit(background, (0,0))
添加精灵
objectsonscreen.append(player)
screen.blit(player, (x, y))
清除精灵
objectsonscreen = [background]
screen.blit(background, (0,0))
想了解更多关于Pygame中精灵的信息,可以查看 这里。注意,如果你的背景不是图片,而只是一个纯色的背景,你也可以用 screen.fill([0, 0, 0])
来代替。
5
这里基本上有两种方法可以选择。你可以选择简单的方法,重新绘制整个背景...
if event.key == pygame.K_BACKSPACE:
screen.blit(background, (0,0))
或者,如果你想让程序运行得更高效一点,可以让blit方法只绘制玩家图像覆盖的那部分背景。你可以这样做...
screen.blit(background, (x, y), pygame.Rect(x, y, 62, 62))
第三个参数中的Rect会让blit只绘制位于x,y位置的62x62像素的背景部分。
当然,这里假设玩家图像总是在背景内部。如果玩家图像只部分覆盖背景,我就不太确定会发生什么。可能会出现错误,或者它会直接从图像的另一边继续。
其实如果这个项目比较小,第一种方法就足够用了,但如果你对性能有顾虑,可以试试第二种方法。