我想画抗锯齿形状.我知道你可以使用pygame的gfxdraw模块来完成这项任务.然而,它似乎只在直接在主窗口上绘制时才起作用,这不适合我,因为我打算使用masks进行碰撞判断.

如何在pygame中实现这一点?

Minimal working example:

import pygame as pg
from pygame import gfxdraw

WIDHT, HEIGHT = 1200, 800
WIN = pg.display.set_mode((WIDHT, HEIGHT))

RADIUS = 80
WHITE = (255, 255, 255)
GREEN = (0, 200, 0)
RED = (200, 0, 0)
TRANS = (1, 1, 1)

class Circle(pg.sprite.Sprite):
    def __init__(self,
                 radius: int,
                 pos: tuple[int, int],
                 color: tuple[int, int, int]):

        super().__init__()
        self.radius = radius
        self.color = color

        self.image = pg.surface.Surface((radius*2, radius*2))
        self.image.fill(TRANS)
        self.image.set_colorkey(TRANS)

        self.rect = self.image.get_rect(center=(pos[0], pos[1]))
        pg.gfxdraw.aacircle(self.image, self.rect.width//2, self.rect.height//2, radius, color)
        pg.gfxdraw.filled_circle(self.image, self.rect.width//2, self.rect.height//2, radius, color)
        self.mask = pg.mask.from_surface(self.image)

    def draw(self):
        WIN.blit(self.image, self.rect)


def main():
    circle_1 = Circle(RADIUS, (500, 500), GREEN)

    running = True
    while running:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                running = False

        WIN.fill(WHITE)

        circle_1.draw()
        pg.gfxdraw.filled_circle(WIN, 700, 500, RADIUS, RED)
        pg.gfxdraw.aacircle(WIN, 700, 500, RADIUS, RED)

        pg.display.update()


if __name__ == "__main__":
    main()

推荐答案

您需要使用每像素alpha格式创建一个透明的pygame.Surface.使用SRCALPHA标志:

self.image = pg.surface.Surface((radius*2, radius*2))

self.image = pg.surface.Surface((radius*2, radius*2), pg.SRCALPHA)

但是,为了获得最高质量,我建议使用OpenCV/cv2(例如How to make a circular countdown timer in Pygame?)

Python相关问答推荐

当pip为学校作业(job)安装sourcefender时,我没有收到匹配的分发错误.我已经try 过Python 3.8.10和3.10.11

将嵌套列表的字典转换为数据框中的行

如何在vercel中指定Python运行时版本?

当密钥是复合且唯一时,Pandas合并抱怨标签不唯一

如何使用Google Gemini API为单个提示生成多个响应?

如果值不存在,列表理解返回列表

图像 pyramid .难以创建所需的合成图像

当从Docker的--env-file参数读取Python中的环境变量时,每个\n都会添加一个\'.如何没有额外的?

如何在solve()之后获得症状上的等式的值

我对我应该做什么以及我如何做感到困惑'

如何设置视频语言时上传到YouTube与Python API客户端

将输入聚合到统一词典中

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

Plotly Dash Creating Interactive Graph下拉列表

如何使用SentenceTransformers创建矢量嵌入?

如何从列表框中 Select 而不出错?

如何使用OpenGL使球体遵循Python中的八样路径?

python sklearn ValueError:使用序列设置数组元素

在Docker容器(Alpine)上运行的Python应用程序中读取. accdb数据库

以异步方式填充Pandas 数据帧