Во-первых, ваше изображение / поверхность должно использовать альфа на пиксель, поэтому при загрузке вызывайте метод convert_alpha()
.Если вы хотите создать новую поверхность (как в примере), вы также можете передать pygame.SRCALPHA
в pygame.Surface
.
Второй шаг - создать еще одну поверхность (здесь она называется alpha_surface
), которую вызалейте белым и нужным альфа-значением (четвертым элементом цветового кортежа).
Наконец, вам нужно скопировать alpha_surface
на ваше изображение и передать pygame.BLEND_RGBA_MULT
в качестве аргумента special_flags
.Это сделает непрозрачные части изображения прозрачными.
import pygame as pg
pg.init()
screen = pg.display.set_mode((800, 600))
clock = pg.time.Clock()
BLUE = pg.Color('dodgerblue2')
BLACK = pg.Color('black')
# Load your image and use the convert_alpha method to use
# per-pixel alpha.
# IMAGE = pygame.image.load('circle.png').convert_alpha()
# A surface with per-pixel alpha for demonstration purposes.
IMAGE = pg.Surface((300, 300), pg.SRCALPHA)
pg.draw.circle(IMAGE, BLACK, (150, 150), 150)
pg.draw.circle(IMAGE, BLUE, (150, 150), 130)
alpha_surface = pg.Surface(IMAGE.get_size(), pg.SRCALPHA)
# Fill the surface with white and use the desired alpha value
# here (the fourth element).
alpha_surface.fill((255, 255, 255, 90))
# Now blit the transparent surface onto your image and pass
# BLEND_RGBA_MULT as the special_flags argument.
IMAGE.blit(alpha_surface, (0, 0), special_flags=pg.BLEND_RGBA_MULT)
done = False
while not done:
for event in pg.event.get():
if event.type == pg.QUIT:
done = True
screen.fill((50, 50, 50))
pg.draw.rect(screen, (250, 120, 0), (100, 300, 200, 100))
screen.blit(IMAGE, (150, 150))
pg.display.flip()
clock.tick(60)
pg.quit()