如何在 pygame 中绘制透明矩形
how to draw transparent rect in pygame
我可以画一个内部透明但轮廓不透明的矩形吗?如果能设置轮廓的宽度就更好了
如果你只想绘制一个矩形的轮廓,你可以将一个整数作为第四个(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))
我可以画一个内部透明但轮廓不透明的矩形吗?如果能设置轮廓的宽度就更好了
如果你只想绘制一个矩形的轮廓,你可以将一个整数作为第四个(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))