Сначала вы должны создать изображение с альфа-каналом, чтобы сделать прозрачную область изображения PNG невидимой.Используйте pygame.Surface.convert_alpha () Чтобы создать поверхность с альфа-каналом:
tintImage = image.convert_alpha()
Чтобы тонировать изображение с помощью pygame.Surface.fill()
, special_flags
тоже должен быть установлен на BLEND_RGBA_MULT
.Это приводит к тому, что все пиксели изображения умножаются на цвет, а не устанавливаются на цвет:
tintImage.fill((R, G, B, 255), None, BLEND_RGBA_MULT)
Примечание. Поскольку изображение должно быть окрашено в разные цвета, исходное изображение должнобыть сохраненнымИспользуйте функцию logo
, чтобы скопировать изображение, и «подкрасьте» «блиц» копию изображения:
def logo(x, y, color):
tintImage = logo_img.convert_alpha()
tintImage.fill((R, G, B, 255), None, BLEND_RGBA_MULT)
screen.blit(tintImage, (x, y))
Вызовите функцию в главном цикле программы:
endProgram = False
while not endProgram:
for e in event.get():
if e.type == QUIT:
endProgram = True
#speed changes position XY
x += dx
y += dy
#detection of collision with border of screen
if y<0 or y>height-47:
dy *= -1
R = random.randint(100,255)
G = random.randint(100,255)
B = random.randint(100,255)
if x<0 or x>width-100:
dx *= -1
R = random.randint(100,255)
G = random.randint(100,255)
B = random.randint(100,255)
screen.fill((0))
#logo_img.fill((R,G,B)) #here is the problem I can not solve
logo(x, y, (R, G, B))
display.update()