Как нарисовать прозрачный прямоугольник в Pygame - PullRequest
0 голосов
/ 11 ноября 2018

Можно ли нарисовать прямоугольник, прозрачный внутри, но не контур? Было бы лучше, если бы я мог установить ширину контура.

like this

1 Ответ

0 голосов
/ 11 ноября 2018

Если вы просто хотите нарисовать контур прямоугольника, вы можете передать целое число в качестве четвертого (width) аргумента pygame.draw.rect:

pygame.draw.rect(screen, (0, 100, 255), (50, 50, 162, 100), 3)  # width = 3

Проблема этого подхода заключается в том, что углы не будут выглядеть четкими и чистыми, а контур не может быть прозрачным.


Вы также можете использовать модуль gfxdraw для рисования нескольких контуров с помощью петли for:

def draw_rect_outline(surface, rect, color, width=1):
    x, y, w, h = rect
    width = max(width, 1)  # Draw at least one rect.
    width = min(min(width, w//2), h//2)  # Don't overdraw.

    # This draws several smaller outlines inside the first outline. Invert
    # the direction if it should grow outwards.
    for i in range(width):
        pygame.gfxdraw.rectangle(screen, (x+i, y+i, w-i*2, h-i*2), color)

draw_rect_outline(screen, (250, 50, 162, 100), (0, 100, 255, 155), 9)

Это также позволяет передавать цвет через альфа-канал, чтобы сделать контур прозрачным.


Можно также создать прозрачную поверхность и нарисовать на ней прямоугольник (прозрачный цвет также можно передать здесь):

surf = pygame.Surface((162, 100), pygame.SRCALPHA)
pygame.draw.rect(surf, (0, 100, 255, 155), (0, 0, 162, 100), 21)

Если вы хотите заполнить прозрачный прямоугольник, просто fill вся поверхность:

surf.fill((0, 100, 255, 155))
...