嗨,我想在pygame中设置非矩形剪贴区域(在本例中为字符“P”),在该区域中将受到严格限制,并在其中绘制其他对象。

有什么选择吗?

多谢

最佳答案

让我们看看我是否正确理解了您的问题:您想将图像“白化”到表面上,但要通过 mask 来实现,该 mask 只允许光源中的某些像素实际最终出现在表面上?

我遇到了这个精确的问题,起初我认为这只能通过PIL来实现。然而,经过一些阅读和试验,事实证明,实际上可以借助pygame相当晦涩的“特殊标志”来完成此操作。下面是一个函数,它可以完成您想要的操作。

def blit_mask(source, dest, destpos, mask, maskrect):
    """
    Blit an source image to the dest surface, at destpos, with a mask, using
    only the maskrect part of the mask.
    """
    tmp = source.copy()
    tmp.blit(mask, maskrect.topleft, maskrect, special_flags=pygame.BLEND_RGBA_MULT)
    dest.blit(tmp, destpos, dest.get_rect().clip(maskrect))

如果希望蒙版透明,则蒙版应为白色,否则应为黑色。

关于python - Pygame:如何在非矩形裁剪区域中绘制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5940935/

10-10 18:21