Ich bin nicht bekannt, dass pygame Funktion, die dieses Problem lösen würde, was bedeutet, Sie im Grunde um eine Lösung zu programmieren selbst (oder etwas anderes als pygame verwenden), da draw
als du gebrochen‘ Ve notiert und gfxdraw
wird Ihnen nicht die Dicke geben.
Ein sehr hässlich aber einfache Lösung ist es, mehrmals über die Bogensegmente zu zeichnen, immer leicht verschoben, um die fehlenden Lücken zu "füllen". Dies wird noch einige Aliasing an dem sehr vor dem Timer Bogen verlassen, aber der Rest wird ausgefüllt werden.
import pygame
from pygame.locals import *
import pygame.gfxdraw
import math
# Screen size
SCREEN_HEIGHT = 350
SCREEN_WIDTH = 500
# Colors
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREY = (150, 150, 150)
RED = (255,0,0)
# initialisation
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
done = False
clock = pygame.time.Clock()
# We need this if we want to be able to specify our
# arc in degrees instead of radians
def degreesToRadians(deg):
return deg/180.0 * math.pi
# Draw an arc that is a portion of a circle.
# We pass in screen and color,
# followed by a tuple (x,y) that is the center of the circle, and the radius.
# Next comes the start and ending angle on the "unit circle" (0 to 360)
# of the circle we want to draw, and finally the thickness in pixels
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)
# fill screen with background
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)
#+90 will shift it from starting at the right to starting (roughly) at the top
pygame.display.flip()
clock.tick(2) # ensures a maximum of 60 frames per second
pygame.quit()
Bitte beachte, dass ich degreesToRadians
und drawCircleArc
von https://www.cs.ucsb.edu/~pconrad/cs5nm/08F/ex/ex09/drawCircleArcExample.py
ich dies im Allgemeinen nicht kopiert haben empfehlen Lösung, aber es könnte in einer Prise tun.
Das sieht viel besser aus, ist aber immer noch nicht perfekt. Ich werde versuchen zu googlen oder über andere mögliche Lösungen nachzudenken –
Einfacher Weg, wenn Sie pygame verwenden müssen, wäre es, es einfach in einem Grafikprogramm zu tun und die Counterschritte von einem Spritesheet zu blit. Wenn Sie nur eine Handvoll Orte benötigen, ist ein handgeschriebener Hack wahrscheinlich nicht die Mühe wert. – Isa
Warum nicht das nächste Segment zeichnen und dann eine Flutfüllung anwenden? –