Как сделать пустую фигуру в Pygame? - PullRequest
0 голосов
/ 18 июня 2019

Я хотел нарисовать пустой круг в 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)

Я ожидал увидеть фоновое изображение через этот круг, но круг я просто черный, это вообще возможно сделать? Может ли кто-нибудь помочь мне с этим?

P.S. под пустым я имею в виду дыру в моей передней поверхности

1 Ответ

0 голосов
/ 18 июня 2019

Просто используйте функцию draw():

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

width представляет размер кривой окружности.Когда это 0, круг сплошной.Если вы установите значение 1, край будет иметь ширину всего один пиксель (пустой круг).

edit: чтобы нарисовать круг со спрайтом, вы можете использовать этот код :

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...