Pygame删除背景图片

问题描述 投票:3回答:3

您将图像涂抹到表面上用作背景。然后按下按钮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))
python wxpython pygame
3个回答
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像素部分。

当然,这假定播放器图像始终在背景中。如果播放器图像仅与背景部分重叠,则我不确定会发生什么。它可能会引发异常,或者只是环绕图像的另一侧。

如果这是一个相当小的项目,第一个选项确实应该很好,但是如果您出于某种原因担心性能,请尝试第二个选项。


3
投票

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

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

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

例如

Initialise背景

objectsonscreen = []
objectsonscreen.append(background)
screen.blit(background, (0,0))

添加Sprite

objectsonscreen.append(player)
screen.blit(player, (x, y))

Clear Sprite

objectsonscreen = [background]
screen.blit(background, (0,0))

请参阅here了解有关Pygame中子画面的更多信息。请注意,如果您的背景不是图像背景,而只是纯色,则也可以使用screen.fill([0, 0, 0])


0
投票

我个人使用

pygame.draw.rect(screen, (RgbColorHere), (x, y, width, height))
© www.soinside.com 2019 - 2024. All rights reserved.