2024-07-03 07:15:00 发布
网友
我正在编写一些代码,其中涉及到使用pygame库在曲面上绘制一个圆。绘制圆的代码如下所示:
surf = pygame.Surface((2000,2000)) pygame.draw.circle(surf, pygame.Color("white"), (1000,1000), 508, 50)
问题是产生的圆有瑕疵
有没有办法在没有得到这些文物的情况下画一个这样的圆?在
你看到的很可能是pygame.draw.circle游戏实施。最有可能的pygame开发人员愚蠢地认为,可以通过依次绘制几个圆来绘制厚圆,每个圆的半径增加一个。这在实践中是行不通的,你会得到像你看到的那样的云纹图案。试着把圆线的厚度增加100或200,看看会发生什么。如果情况变得更糟,那就是pygame.draw.circle的错。在
pygame.draw.circle
一个解决方案是提供您自己的圆渲染例程。当然可以这样做,但是为了达到最佳性能,在PyPoice的C/C++扩展模块中使用OpenGL(有或没有片段着色器)是有意义的。在
要为每条扫描线获得一个完美的圆,您必须计算每个扫描线填充区域的起点和终点。在python中使用pygame.draw.line绘制单独的扫描线。在
在圆和弧方法的注释中提到了这个错误。在draw.circle documentation的注释中有一个解决方法。这是根据解决方法改编的:
def draw_outlined_circle(surf, color, origin, radius, thickness): width = radius * 2 + thickness * 2 background = (0, 0, 0, 0) circle = pygame.Surface((width, width)).convert_alpha() rect = circle.get_rect() circle.fill(background) pygame.draw.circle(circle, color, rect.center, radius) pygame.draw.circle(circle, background, rect.center, radius - thickness) surf.blit(circle, (origin[0] - (rect.w / 2), origin[1] - (rect.w / 2)))
此方法使用一个额外的Surface并绘制两个圆:一个较小的圆在一个较大的圆内以达到相同的效果。较小圆的填充颜色的alpha值为0,因此整个圆的中心显示为透明。在
Surface
编辑:从上面的评论中,我看到pygame的FAQ中也提到了这种行为。在
我修复了这个问题,它将在pygame的下一个版本(1.9.4)中出现。你怎么画出那样的圆而没有人工制品?使用新版本的pygame。在
你看到的很可能是pygame.draw.circle游戏实施。最有可能的pygame开发人员愚蠢地认为,可以通过依次绘制几个圆来绘制厚圆,每个圆的半径增加一个。这在实践中是行不通的,你会得到像你看到的那样的云纹图案。试着把圆线的厚度增加100或200,看看会发生什么。如果情况变得更糟,那就是
pygame.draw.circle
的错。在一个解决方案是提供您自己的圆渲染例程。当然可以这样做,但是为了达到最佳性能,在PyPoice的C/C++扩展模块中使用OpenGL(有或没有片段着色器)是有意义的。在
要为每条扫描线获得一个完美的圆,您必须计算每个扫描线填充区域的起点和终点。在python中使用pygame.draw.line绘制单独的扫描线。在
在圆和弧方法的注释中提到了这个错误。在draw.circle documentation的注释中有一个解决方法。这是根据解决方法改编的:
此方法使用一个额外的
Surface
并绘制两个圆:一个较小的圆在一个较大的圆内以达到相同的效果。较小圆的填充颜色的alpha值为0,因此整个圆的中心显示为透明。在编辑:从上面的评论中,我看到pygame的FAQ中也提到了这种行为。在
我修复了这个问题,它将在pygame的下一个版本(1.9.4)中出现。你怎么画出那样的圆而没有人工制品?使用新版本的pygame。在
相关问题 更多 >
编程相关推荐