Попытка заставить разделы спрайта изменить цвет, но вместо этого изменяется весь спрайт - PullRequest
2 голосов
/ 15 октября 2019

В моей игре есть несколько спрайтов, которым нужны определенные части, чтобы иметь возможность менять цвет.

Мой процесс Я пытаюсь получить чистое белое изображение спрайта, прозрачное везде, где цвет не нуженбыть. Я перетаскиваю цветной квадрат поверх этого, а затем поверх основного спрайта, однако главный спрайт тогда меняет цвет везде, но при соблюдении прозрачности основного спрайта. Больше всего меня смущает то, что цветное изображение в маске выглядит правильно, когда я помещаю его на главный экран.

# Load main sprite and mask sprite
        self.image = pygame.image.load("Enemy.png").convert_alpha()
        self.mask = pygame.image.load("EnemyMask.png").convert_alpha()

# Create coloured image the size of the entire sprite
        self.coloured_image = pygame.Surface([self.width, self.height])
        self.coloured_image.fill(self.colour)

# Mask off the coloured image with the transparency of the masked image, this part works
        self.masked = self.mask.copy()
        self.masked.blit(self.coloured_image, (0, 0), None, pygame.BLEND_RGBA_MULT)

# Put the masked image on top of the main sprite
        self.image.blit(self.masked, (0, 0), None, pygame.BLEND_MULT)

Enemy.png enemy.png

EnemyMask.png (он белый, поэтому его не видно) EnemyMask.png

Маскированный цвет Маскированный цвет

Final Failed Sprite Failed Sprite

Не могу опубликовать изображения, недостаточно репутации

Я не получаю ошибки, но только белая часть щита должна быть зеленой

1 Ответ

1 голос
/ 16 октября 2019

self.image - это загруженное изображение, где вы хотите изменить определенные области определенным цветом, а self.mask - маска, которая определяет регионы.

И вы создаете изображение masked, которое содержит области, указанные в mask, окрашенные в определенный цвет.

Все, что вам нужно сделать, это .blitтонированная маска (masked) на image без какого-либо набора special_flags:

self.image.blit(self.masked, (0, 0))

См. пример, где красный прямоугольник заменяется синим прямоугольником:

...