如何在Pygame中绘制透明矩形

4
我可以画一个内部是透明的矩形,但轮廓线不透明吗?如果能设置轮廓线的宽度会更好。

like this


你想知道如何只绘制轮廓还是如何使轮廓透明?要绘制轮廓,您可以将一个int值作为第四个参数传递给 pygame.draw.rect。问题在于,对于较大的宽度,它看起来相当丑陋,因为在角落处会有间隙。您也可以创建自己的矩形轮廓函数并绘制四条线。 - skrx
1个回答

12

如果您只想绘制矩形的轮廓,可以将整数作为第四个参数(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)

这也允许您传递带有 alpha 通道的颜色,以使轮廓透明。


还可以创建透明表面并在其上绘制矩形(这里也可以传递透明颜色):

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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接