Можно ли изменить цвета спрайтов в Pygame? - PullRequest
2 голосов
/ 19 мая 2019

Я делаю игру на Python с использованием Pygame, в которую входит небольшой производитель аватаров до запуска игры, но вместо создания большого спрайт-листа с 88 различными комбинациями причесок и цветов, есть ли способ, который я могу просто использовать общее изображение .png каждой прически и применить к ней цвет в игре?

Прически сохраняются в виде изображений .png с альфа-каналом и сглаживанием, поэтому они представляют собой не один оттенок цвета. У меня 8 разных причесок и 11 разных цветов. Не было бы проблемой загрузить их в виде листа спрайта и обрезать их в игре, но если бы был способ применить цвет (или оттенок) в игре, то не только было бы легче в памяти, но и откроет его для большего количества возможностей.

hairstyles

1 Ответ

1 голос
/ 19 мая 2019

Если изображение является «маской», с прозрачным фоном и белой (255, 255, 255) маской, то вы можете легко «подкрасить» изображение.

Загрузить изображение:

image = pygame.image.load(imageName)

Создание однородного цветного изображения с альфа-каналом и одинаковым размером:

colorImage = pygame.Surface(image.get_size()).convert_alpha()
colorImage.fill(color)

Смешайте image с maskImage, используя фильтр BLEND_RGBA_MULT:

image.blit(colorImage, (0,0), special_flags = pygame.BLEND_RGBA_MULT)

Класс спрайта может выглядеть так:

class MySprite(pygame.sprite.Sprite):

    def __init__(self, imageName, color):
        super().__init__() 

        self.image = pygame.image.load(imageName)
        self.rect = self.image.get_rect()

        colorImage = pygame.Surface(self.image.get_size()).convert_alpha()
        colorImage.fill(color)
        self.image.blit(colorImage, (0,0), special_flags = pygame.BLEND_RGBA_MULT)
...