Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame在背景上擦除图像_Python_Wxpython_Pygame - Fatal编程技术网

Python Pygame在背景上擦除图像

Python Pygame在背景上擦除图像,python,wxpython,pygame,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.g

您可以将一个图像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))

通常,blit工作流只是将原始背景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))
透明雪碧

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

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

这里基本上可以做两件事。你可以走简单的路线,再画一次背景

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像素部分

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

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

我个人使用

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

如果我使用第一个选项,它会覆盖我的其他层(我在屏幕上快速显示的其他图像)。然而!第二个选项很有魅力,谢谢!你提到“添加精灵”。我见过很多人把这个词抛来抛去。但是,这意味着什么?它仅仅是前景的东西,而比背景小吗?参见维基百科的文章