2017-01-13 233 views
1

在Pygame中有绘制半圆的方法吗?事情是这样的:在Pygame中绘制半圆

semicircle

pygame.surface.set_clip()不会为这个工作 - 我需要圆,看起来像扇形为好,像这样的:

pie slice

+0

@ TigerhawkT3我编辑的问题 “来解释它是如何不同”。你能打开它吗? –

+0

怎么样一个好的多边形? http://stackoverflow.com/questions/23246185/python-draw-pie-shapes-with-colour-filled – dodell

回答

1

PyGame没有函数来创建填充arc/pie但您可以使用PIL/pillowpieslice生成位图并转换为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