【问题标题】:Pygame.draw.arc() completion bug or just me?Pygame.draw.arc() 完成错误还是只有我?
【发布时间】:2014-11-24 15:53:49
【问题描述】:

我正在尝试在端点处绘制几条带有正方形的弧线,其中大部分都已完成,但端点有些地方不太对劲。在我认为弧应该结束的位置和绘制它的位置之间总是有几个像素的差距。示例代码如下:

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

【问题讨论】:

  • 查看 API,arc 函数采用起始角度和终止角度,但看起来您只指定了两者之一。会不会是这个问题?
  • 抱歉,打错了。我已经编辑了代码以将起点添加到 0,因为它们应该是。除了从 pi/4 到 pi/2 的最后一条弧

标签: python python-2.7 pygame draw


【解决方案1】:

感谢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()

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 2023-02-11
    相关资源
    最近更新 更多