我试图在终点处用正方形绘制几个圆弧,但是我已经完成了大部分圆弧,但是有些结果并不完全正确。在我认为弧应该结束的位置和绘制的位置之间总是有几个像素的间隙。示例代码如下:
import pygame
from math import pi
pygame.init()
screen = pygame.display.set_mode([1000,1000])
clock = pygame.time.Clock()
done = False
while not done:
clock.tick(10)
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
screen.fill((0,0,0))
# draw first arc just past pi/2 to make sure arc is not cut off by rectangle bounds
pygame.draw.arc(screen, (255,255,255),[100,100,800,800], 0, 9 * pi / 16, 1)
# normal, easy, simple, arc does not touch vertical red line as expected
pygame.draw.arc(screen, (255,255,255),[200,200,600,600], 0, 2 * pi, 1)
# shorter arc because in my actual code it seems that smaller arcs have larger gaps
# but I can't seem to tell here besides it doesn't connect either
pygame.draw.arc(screen, (255,255,255),[300,300,400,400], 4 * pi / 16, pi / 2, 1)
# Horizontal and vertical lines for comparison
pygame.draw.line(screen, (255,0,0), [500,500], [500,0])
pygame.draw.line(screen, (255,0,0), [500,500], [900,500])
pygame.display.flip()
pygame.quit()
[样品输出] [1]注意鼠标光标左侧的间隙。 http://i.stack.imgur.com/0zxkG.jpg
OS X和Linux Mint上的结果相同。首先绘制线条并没有什么不同,它总是终点而不是起点。谢谢你的阅读!
答案 0 :(得分:0)
import pygame
from pygame import gfxdraw
RED = pygame.Color("red")
WHITE = pygame.Color("white")
def draw_arc(surface, center, radius, start_angle, stop_angle, color):
x,y = center
start_angle = int(start_angle%360)
stop_angle = int(stop_angle%360)
if start_angle == stop_angle:
gfxdraw.circle(surface, x, y, radius, color)
else:
gfxdraw.arc(surface, x, y, radius, start_angle, stop_angle, color)
pygame.init()
screen = pygame.display.set_mode([500,500])
screen_rect = screen.get_rect()
x,y = screen_rect.center
clock = pygame.time.Clock()
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
screen.fill((0,0,0))
#Arcs
draw_arc(screen, screen_rect.center, 200, 45, 360, WHITE)
draw_arc(screen, screen_rect.center, 220, 0, 360, WHITE)
draw_arc(screen, screen_rect.center, 100, -90, -135, WHITE)
draw_arc(screen, screen_rect.center, 120, -135, -90, WHITE)
# Horizontal and vertical lines for comparison
pygame.draw.line(screen, RED, screen_rect.center, screen_rect.midright)
pygame.draw.line(screen, RED, screen_rect.center, screen_rect.midtop)
pygame.draw.line(screen, RED, screen_rect.topleft, screen_rect.bottomright)
pygame.display.flip()
clock.tick(30)
pygame.quit()