pygame:屏蔽非图像类型的表面

Posted

技术标签:

【中文标题】pygame:屏蔽非图像类型的表面【英文标题】:pygame: mask non-image type surfaces 【发布时间】:2020-12-26 11:23:17 【问题描述】:

我知道如何屏蔽图像。但是,如果我只是想创建一个圆圈并对其进行遮罩,那么在我的代码之外创建一个简单圆圈的图像会很烦人,尤其是当我需要创建不同类型的圆圈时。显然,您可以在 pygame 中创建 Rect 对象,但没有类 Circle。 pygame.mask.from_surface 需要 surface。我可以将非图像类型的表面作为参数传递吗?如果是这样,我该如何掩盖圆圈和/或其他对象?

这是我想象的显然会引发错误的东西:

circle = pygame.Circle((10, 10), 5) # (center coordinates), radius
pygame.mask.from_surface(circle)

【问题讨论】:

【参考方案1】:

无法直接创建圆形蒙版。见pygame.mask。您需要在Surface 上画一个圆圈。创建一个创建Surface的函数并在Surface上画一个圆:

def circleSurface(color, radius):
    shape_surf = pygame.Surface((radius * 2, radius * 2), pygame.SRCALPHA)
    pygame.draw.circle(shape_surf, color, (radius, radius), radius)
    return shape_surf 

Surface创建Mask

circle = circleSurface((255, 255, 255), 5) # (center coordinates), radius
pygame.mask.from_surface(circle)

但是,如果您想使用圆圈来裁剪显示区域,请参阅以下问题的答案:

how to make circular surface in PyGame

How to fill only certain circular parts of the window in PyGame?

【讨论】:

我喜欢您将工作演示与链接放在一起的方式。

以上是关于pygame:屏蔽非图像类型的表面的主要内容,如果未能解决你的问题,请参考以下文章

Python碰撞使用pygame检测图像(图像类型:png)

如何在 Pygame 中将具有一定透明度的 PNG 粘贴到表面上? [复制]

如何在 pygame 表面打洞? [复制]

Pygame如何改变图像碰撞点

Pygame Blit 一次?

创建图像表面窗口的精灵表