Подтвердить что ты не робот

Как сделать поверхность с прозрачным фоном в pygame

Может кто-нибудь дать мне пример кода, который создает поверхность с прозрачным фоном в pygame?

4b9b3361

Ответ 1

Это должно сделать это:

image = pygame.Surface([640,480], pygame.SRCALPHA, 32)
image = image.convert_alpha()

Убедитесь, что глубина цвета (32) остается явно заданной. Это не будет работать.

Ответ 2

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

surf.set_colorkey((255,0,255)) // Sets the colorkey to that hideous purple

Поверхности, которые используют colorkey вместо альфы, намного быстрее, чем blit, так как они не требуют какой-либо математики смешивания. На поверхности SDL используется простая битовая маска, когда у нее есть набор colorkey, который практически не распространяется на служебные.

Ответ 3

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

import pygame as p, random as r, time as t
width, height = 640, 480
pos, vel = [0, 0], [1, 1]
rectWidth, rectHeight = 130, 100
screen = p.display.set_mode((width, height))
p.init()
pos[0], pos[1] = r.randint(200, 400), r.randint(200, 400)
while True:
    for event in p.event.get():
        if event.type == p.QUIT: exit()
    keys = p.key.get_pressed()
    if keys[p.K_ESCAPE]: p.event.post(p.event.Event(p.QUIT))
    pos[0] += vel[0]
    pos[1] += vel[1]
    if pos[0] > width or pos[0] < rectWidth: vel[0] = -vel[0]
    if pos[1] > height or pos[1] < rectHeight: vel[1] = -vel[1]
    screen.fill((0, 0, 0))
    screen.fill((255, 0, 0), (pos[0] - rectWidth, pos[1] - rectHeight, rectWidth, rectHeight))
    p.display.flip()
    t.sleep(1.0/80.0)