Pygame:绘制矩形边框

7

我正在使用pygame制作一个3D乒乓球游戏。我想要给矩形添加一个粗黑色边框层,以使其更加时尚。以下是我的尝试:

pygame.draw.rect(screen, (0,0,255), (x,y,150,150), 0)
pygame.draw.rect(screen, (0,0,0), (x-1,y-1,155,155), 1)
pygame.draw.rect(screen, (0,0,0), (x-2,y-2,155,155), 1)
pygame.draw.rect(screen, (0,0,0), (x-3,y-3,155,155), 1)
pygame.draw.rect(screen, (0,0,0), (x-4,y-4,155,155), 1)

虽然这样可以实现目的,但是由于我正在创建的游戏是一个3D游戏,所以这种方法很耗时间。请告诉我pygame是否有内置的方法来绘制矩形边框。对我的英语表示抱歉。

2个回答

3

你也可以将它放在一个函数中,并使用for循环使其更加简洁。首先,你会注意到你画的四个矩形都是按照一种漂亮而简单的模式进行的,所以你可以像这样简化画四个矩形的过程:

pygame.draw.rect(surface, (0,0,255), (x,y,150,150), 0)
for i in range(4):
    pygame.draw.rect(surface, (0,0,0), (x-i,y-i,155,155), 1)

然后,因为pygame的绘制函数不需要在全局范围内运行,所以你可以将所有内容放入一个函数中:
def drawStyleRect(surface):
    pygame.draw.rect(surface, (0,0,255), (x,y,150,150), 0)
    for i in range(4):
        pygame.draw.rect(surface, (0,0,0), (x-i,y-i,155,155), 1)

然后,在你的主循环中,你所要做的就是运行:

while not done:
   ...
   drawStyleRect(screen) # Or whatever you named the returned surface of 'pygame.display.set_mode()'
   ...

如果您真的想这样做,甚至可以将绘图函数放在单独的模块中。


2
创建一个函数,用于创建一个带有透明度(SRCALPHA)的 pygame.Surface 对象,并在该对象上绘制矩形和边框:
def create_rect(width, height, border, color, border_color):
    surf = pygame.Surface((width+border*2, height+border*2), pygame.SRCALPHA)
    pygame.draw.rect(surf, color, (border, border, width, height), 0)
    for i in range(1, border):
        pygame.draw.rect(surf, border_color, (border-i, border-i, width+5, height+5), 1)
    return surf

在主应用程序循环之前创建所有表面,并在循环中使用blit它们。
rect_surf1 = create_rect(150, 150, 5, (0, 0, 255), (0, 0, 0))
# [...]

run = True
while run:

    # [...]

    screen.blit(rect_surf1, (x, y))

    # [...]

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