在背景上擦除图像的Pygame

时间:2012-02-15 01:31:48

标签: python wxpython pygame

您将图像blit到表面上以用作背景。然后按下按钮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 :(得分: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位置的'background'的62x62像素部分。

当然,这假设玩家形象总是在背景中。如果玩家图像仅与背景部分重叠,我不完全确定会发生什么。它可能会抛出异常,或者它只是环绕到图像的另一侧。

如果这是一个相当小的项目,真的第一个选项应该没问题,但是如果你出于某种原因关注性能,请尝试第二个选项。

答案 1 :(得分:3)

通常,blit工作流程只是将原始背景blit到屏幕。

在您的代码中,您将使用screen.blit(background, (0,0))

当您开始组合大量曲面时,您可能需要变量或变量列表来跟踪屏幕状态。

E.g。

初始化背景

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中精灵的更多信息,请参阅here。请注意,如果您的背景不是图像背景而且只是纯色,您也可以使用screen.fill([0, 0, 0])代替。

答案 2 :(得分:0)

我个人使用

pygame.draw.rect(screen, (RgbColorHere), (x, y, width, height))