Нарисуйте прозрачный прямоугольник в Pygame - PullRequest
27 голосов
/ 14 июня 2011

Как я могу нарисовать прямоугольник, который имеет цвет с альфа? У меня есть:

windowSurface = pygame.display.set_mode((1000, 750), pygame.DOUBLEBUF)
pygame.draw.rect(windowSurface, pygame.Color(255, 255, 255, 128), pygame.Rect(0, 0, 1000, 750))

Но я хочу, чтобы белый прямоугольник был прозрачным на 50%, но значение альфа не работает.

Ответы [ 4 ]

46 голосов
/ 15 июня 2011

pygame.draw функции не будут рисоваться с альфа-каналом. В документации сказано:

Большинство аргументов принимают цветной аргумент, который является триплетом RGB. Они также могут принимать четверку RGBA. Альфа-значение будет записано непосредственно в Surface, если оно содержит альфа-пиксели, но функция рисования не будет рисовать прозрачно.

Что вы можете сделать, это создать вторую поверхность, а затем перетащить ее на экран. Блиттинг будет делать альфа-смешивание и цветовые ключи. Кроме того, вы можете указать альфа на уровне поверхности (быстрее и меньше памяти) или на уровне пикселей (медленнее, но точнее). Вы можете сделать либо:

s = pygame.Surface((1000,750))  # the size of your rect
s.set_alpha(128)                # alpha level
s.fill((255,255,255))           # this fills the entire surface
windowSurface.blit(s, (0,0))    # (0,0) are the top-left coordinates

или

s = pygame.Surface((1000,750), pygame.SRCALPHA)   # per-pixel alpha
s.fill((255,255,255,128))                         # notice the alpha value in the color
windowSurface.blit(s, (0,0))

Имейте в виду, что в первом случае все, что вы рисуете в s, будет сглажено указанным вами значением альфа. Поэтому, если вы используете это, например, для рисования элементов управления наложением, вам лучше использовать второй вариант.

Также рассмотрите возможность использования pygame.HWSURFACE для создания поверхности с аппаратным ускорением.

Проверьте документацию Surface на сайте Pygame, особенно вступление.

1 голос
/ 06 января 2019

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

pygame.draw.rect(surface, [255, 0, 0], [50, 50, 90, 180], 1)

«1» означает, что оно не заполнено

0 голосов
/ 13 января 2019

Способ сделать это состоит в том, чтобы вместо рисования прямоугольника с помощью pygame вы могли создать изображение прозрачного прямоугольника с помощью программы для рисования, такой как paint.net или Fire Alpaca.

0 голосов
/ 14 июня 2011

Вы можете добавить четвертое значение к вашему цветному кортежу, чтобы представить Альфа:

pygame.draw.rect(windowSurface, (255, 255, 255, 127), pygame.Rect(0, 0, 1000, 750))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...