我不知道是否有任何pygame函数可以解决这个问题,这意味着你基本上需要自己编写一个解决方案(或使用其他东西而不是pygame),因为如你所指出的,draw是有问题的,而gfxdraw不会给你厚度。
一个非常丑陋但简单的解决方案是在弧段上多次绘制,总是稍微移动一下以“填补”缺失的间隙。这仍然会在计时器弧的前端留下一些锯齿,但其余部分将被填充。
import pygame
from pygame.locals import *
import pygame.gfxdraw
import math
SCREEN_HEIGHT = 350
SCREEN_WIDTH = 500
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREY = (150, 150, 150)
RED = (255,0,0)
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
done = False
clock = pygame.time.Clock()
def degreesToRadians(deg):
return deg/180.0 * math.pi
def drawCircleArc(screen,color,center,radius,startDeg,endDeg,thickness):
(x,y) = center
rect = (x-radius,y-radius,radius*2,radius*2)
startRad = degreesToRadians(startDeg)
endRad = degreesToRadians(endDeg)
pygame.draw.arc(screen,color,rect,startRad,endRad,thickness)
screen.fill(WHITE)
center = [150, 200]
pygame.gfxdraw.aacircle(screen, center[0], center[1], 105, BLACK)
pygame.gfxdraw.aacircle(screen, center[0], center[1], 120, BLACK)
pygame.display.update()
step = 10
maxdeg = 0
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
maxdeg = maxdeg + step
for i in range(min(0,maxdeg-30),maxdeg):
drawCircleArc(screen,RED,(150,200),119,i+90,max(i+10,maxdeg)+90,14)
pygame.display.flip()
clock.tick(2)
pygame.quit()
请注意,我从
https://www.cs.ucsb.edu/~pconrad/cs5nm/08F/ex/ex09/drawCircleArcExample.py中复制了
degreesToRadians
和
drawCircleArc
。
我一般不建议这种解决方案,但在紧急情况下可能可行。
pygame.gfxdraw.filled_polygon()
,但这意味着需要预先计算多边形弧段的点,这看起来很麻烦。 - Isa