在Pygame中抗锯齿形状

23 投票
2 回答
22739 浏览
提问于 2025-04-18 07:31

我正在使用Pygame来画一些东西。问题是它们的边缘看起来很锯齿状:

锯齿状的同心圆

我想让它们看起来更柔和,像这样:

平滑的同心圆


到目前为止,我的想法是先把形状画得大一倍,然后用

pygame.transform.smoothscale(surf, (w/2, h/2))

把它缩小到我想要的大小。

不幸的是,如果我在一个透明的表面上画我的形状,使用smoothscale会把接触透明像素的边缘变成黑色!

  • 我该如何平滑缩放一张图片,而不把透明像素变成黑色,或者
  • 还有什么其他方法可以让边缘变得平滑?

2 个回答

12

这是一个针对andreasdr回答的实用解决方案。

import pygame
from pygame import gfxdraw

def draw_circle(surface, x, y, radius, color):
    gfxdraw.aacircle(surface, x, y, radius, color)
    gfxdraw.filled_circle(surface, x, y, radius, color)
27

为了在pygame中绘制抗锯齿的填充形状,你可以使用一个叫做 gfxdraw 的模块,先画一个抗锯齿的轮廓,然后再画一个普通的填充形状。

来自 https://www.pygame.org/docs/ref/gfxdraw.html 的说明:

要绘制一个抗锯齿的填充形状,首先使用带有 aa* 的函数版本,然后再使用填充版本。

注意,你需要明确导入 gfxdraw,也就是说要写 from pygame import gfxdraw

撰写回答