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

Нарисуйте прозрачный прямоугольник в pygame

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

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%, но альфа-значение не работает.

4b9b3361

Ответ 1

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

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

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

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 docs на сайте pygame, особенно вступление.

Ответ 2

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

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

"1" означает, что он не заполнен

Ответ 3

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

Ответ 4

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

pygame.draw.rect(windowSurface, (255, 255, 255, 127), pygame.Rect(0, 0, 1000, 750))