【问题标题】:How to make an empty shape in pygame?如何在pygame中制作一个空的形状?
【发布时间】:2019-06-18 08:31:06
【问题描述】:

我想在pygame中画一个空的圆圈,我的意思是你应该通过它看到表面的后面。

我编写了一个代码,用于查找一个表面中的所有彩色像素,并清空它们在另一个表面中的坐标。

def draw_empty(surf1, surf2, pos):
    """makes surf2 pixels empty on surf1"""
    pixobj2 = pygame.PixelArray(surf2)
    empty = []
    for x in range(len(pixobj2)):
        for y in range(len(pixobj2[x])):
            if pixobj2[x][y]!=0:
                empty.append((x,y))
    del pixobj2
    pixobj1 = pygame.PixelArray(surf1)
    for pix in empty:
        pixobj1[pix[0]+pos[0]][pix[1]+pos[1]] = 0
    del pixobj1
window = pygame.display.set_mode((600, 600))
white_surf = pygame.surface.Surface((600, 600))
white_surf.fill((255, 255, 255))
circle_surf = pygame.surface.Surface((50, 50))
pygame.draw.circle(circle_surf, (1, 1, 1), circle_surf.get_rect().center, 25)
pic = pygame.image.load('pic.png')
pic = pygame.transform.scale(pic, (600, 600))
done = False
while not done:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()
    draw_empty(white_surf, circle_surf, (200, 200))
    window.blit(pic, (0, 0))
    window.blit(white_surf, (0, 0))
    pygame.display.update()
    pygame.time.Clock().tick(60)

我希望通过那个圆圈看到背景图片,但我只是黑色的圆圈,这甚至可以做到吗?有人可以帮我吗?

附: 空,我的意思是像我前面的一个洞

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    只需使用draw() 函数:

    pygame.draw.circle(Surface, color, pos, radius, width=0)
    

    width代表圆周曲线的大小。当它为 0 时,圆是实心的。如果将其设置为 1,则边缘只有 1 个像素宽(一个空圆圈)。

    编辑:用精灵画一个圆圈,你可以使用这个代码

    import pygame
    import pygame.gfxdraw
    
    IMG = pygame.Surface((30, 30), pygame.SRCALPHA)
    pygame.gfxdraw.aacircle(IMG, 15, 15, 14, (0, 255, 0))
    pygame.gfxdraw.filled_circle(IMG, 15, 15, 14, (0, 255, 0))
    
    class img(pygame.sprite.Sprite):
    
        def __init__(self):
            pygame.sprite.Sprite.__init__(self)
            self.image = IMG
            self.rect = self.image.get_rect(center=(150, 200))
    

    代码归功于dunker_wanderer

    【讨论】:

      【解决方案2】:

      您可以像绘制颜色或表面图像时一样绘制形状,然后只需使用以下方法将填充设置为透明颜色:

      empty = (255,255,255,0) 
      surface.fill(empty)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-12
        • 2021-05-25
        • 1970-01-01
        • 2018-10-14
        • 1970-01-01
        • 2012-07-30
        • 2020-12-01
        相关资源
        最近更新 更多