用Pygam画半圆

2024-04-24 23:47:04 发布

您现在位置:Python中文网/ 问答频道 /正文

在Pygame中有没有画半圆的方法?像这样:

semicircle

pygame.surface.set_clip()不适用于此-我需要类似于饼图的圆形,如下图所示:

pie slice


Tags: 方法clip圆形surfacepygameset半圆
1条回答
网友
1楼 · 发布于 2024-04-24 23:47:04

PyGame没有创建填充的arc/pie的功能,但是可以使用PIL/pillow生成带有pieslice的位图,并转换为PyGame图像来显示它。在

import pygame
#import pygame.gfxdraw
from PIL import Image, ImageDraw

#  - constants  -

BLACK = (  0,   0,   0)
WHITE = (255, 255, 255)
BLUE  = (  0,   0, 255)
GREEN = (  0, 255,   0)
RED   = (255,   0,   0)
GREY  = (128, 128, 128)

#PI = 3.1415

#  - main   

pygame.init()
screen = pygame.display.set_mode((800,600))

# - generate PIL image with transparent background -

pil_size = 300

pil_image = Image.new("RGBA", (pil_size, pil_size))
pil_draw = ImageDraw.Draw(pil_image)
#pil_draw.arc((0, 0, pil_size-1, pil_size-1), 0, 270, fill=RED)
pil_draw.pieslice((0, 0, pil_size-1, pil_size-1), 330, 0, fill=GREY)

# - convert into PyGame image -

mode = pil_image.mode
size = pil_image.size
data = pil_image.tobytes()

image = pygame.image.fromstring(data, size, mode)

image_rect = image.get_rect(center=screen.get_rect().center)

# - mainloop -

clock = pygame.time.Clock()
running = True

while running:

    clock.tick(10)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                running = False

    screen.fill(WHITE)
    #pygame.draw.arc(screen, BLACK, (300, 200, 200, 200), 0, PI/2, 1)
    #pygame.gfxdraw.pie(screen, 400, 300, 100, 0, 90, RED)
    #pygame.gfxdraw.arc(screen, 400, 300, 100, 90, 180, GREEN)

    screen.blit(image, image_rect) # <- display image

    pygame.display.flip()

# - end -

pygame.quit()

结果:

enter image description here

GitHub:furas/python-examples/pygame/pillow-image-pieslice

相关问题 更多 >