Pygame.draw.arc()完成bug还是只是我?

时间:2014-11-24 15:53:49

标签: python python-2.7 pygame draw

我试图在终点处用正方形绘制几个圆弧,但是我已经完成了大部分圆弧,但是有些结果并不完全正确。在我认为弧应该结束的位置和绘制的位置之间总是有几个像素的间隙。示例代码如下:

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上的结果相同。首先绘制线条并没有什么不同,它总是终点而不是起点。谢谢你的阅读!

1 个答案:

答案 0 :(得分:0)

this reddit post

中感谢/ u / Mekire
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()