我知道pygame.draw.polygon()
,但它只能处理没有alpha值的颜色。有没有一个类似的功能,可以?我找了一点也没找到,所以我试着自己写。不知何故,它偶尔会漏掉像素(值得注意的是,它只需要为凸四边形工作)。在这里,我为写得不好的低效代码提前道歉:
def fill_quad(A, B, C, D, color=(0, 255, 100, 100)):
M = quad_center(A, B, C, D);
dxA, dyA = A[0] - M[0], A[1] - M[1];
dxB, dyB = B[0] - M[0], B[1] - M[1];
dxC, dyC = C[0] - M[0], C[1] - M[1];
dxD, dyD = D[0] - M[0], D[1] - M[1];
dist = max(math.hypot(dxA, dyA), math.hypot(dxB, dyB), math.hypot(dxC, dyC), math.hypot(dxD, dyD));
dxA, dyA, dxB, dyB, dxC, dyC, dxD, dyD = map(lambda d: d / dist, (dxA, dyA, dxB, dyB, dxC, dyC, dxD, dyD));
for i in range(0, int(dist)+1, 1):
connect(A, B, C, D, color=color);
A = A[0] - dxA, A[1] - dyA;
B = B[0] - dxB, B[1] - dyB;
C = C[0] - dxC, C[1] - dyC;
D = D[0] - dxD, D[1] - dyD;
quad_center
返回由四个点组成的多边形的中心,connect
连接点,就像pygame.draw.lines
一样,但它可以实现透明。问题似乎在于dxA
、dxB
等和dyA
、dyB
等(因为它们的步长太大),这就是它丢失像素的原因。问题不在于我的connect
函数,因为我在使用pygame的内置函数时也遇到同样的问题。要在您的计算机上运行此操作,只需将connect(A, B, C, D, color=color)
替换为pygame.draw.lines(screen, color, True, (A, B, C, D))
,并将其用于quad_center
:
def midpoint(A, B):
return (A[0] + B[0]) / 2, (A[1] + B[1]) / 2;
def quad_center(A, B, C, D):
return midpoint(midpoint(A, B), midpoint(C, D));
为了完整起见,这里有一个我说“缺少像素”的例子: 每个四边形都是用我的函数画的。你到处都能看到蓝色的条纹,这就是我指的
如果像这样的函数已经存在,显然我更喜欢它,但如果没有任何帮助,我写的函数是感激的。谢谢你的帮助
目前没有回答
相关问题 更多 >
编程相关推荐