首页 > 解决方案 > PyGame 负颜色/表面

问题描述

我正在用 PyGame 创建一个游戏。在那里我想创造负面效果,所有屏幕都变成负面的。

这对于像矩形这样的简单形状非常容易:(并使用rect而不是pygame.draw.rect

# set negative to 1 to activate effect
negative = 0

def rect(win, color, area, width=0):
    if negative:
        pygame.draw.rect(win, (255 - color[0], 255 - color[1], 255 - color[2]), area, width)
    else:
        pygame.draw.rect(win, color, area, width)

但我不知道如何对图像进行这种效果。我尝试做负像复制,但如果这种效果不是即时的并且会逐渐填满屏幕,那么这将无济于事。

# negative image copy
def negcopy(image):
    neg = pygame.Surface(image.get_size())

    for y in range(image.get_height()):
        for x in range(image.get_width()):
            c = image.get_at((x, y)
            neg.set_at((x, y), (255 - color[0], 255 - color[1], 255 - color[2], 255))

    return neg

标签: pythonpygamepygame-surface

解决方案


您可以为此 pygame.Surface.blit使用special_flag参数BLEND_SUB
创建一个大小相同的全白图像并减去原始图像:

neg = pygame.Surface(image.get_size())
neg.fill((255, 255, 255))
neg.blit(image, (0, 0), special_flags=pygame.BLEND_SUB)

推荐阅读